mirror of https://github.com/KLayout/klayout.git
commit
ee8966a97e
|
|
@ -88,6 +88,7 @@ jobs:
|
||||||
path: dist
|
path: dist
|
||||||
|
|
||||||
- uses: pypa/gh-action-pypi-publish@v1.4.2
|
- uses: pypa/gh-action-pypi-publish@v1.4.2
|
||||||
|
continue-on-error: true # might fail if we don't bump the version
|
||||||
with:
|
with:
|
||||||
user: __token__
|
user: __token__
|
||||||
password: ${{ secrets.test_pypi_password }}
|
password: ${{ secrets.test_pypi_password }}
|
||||||
|
|
|
||||||
12
MANIFEST.in
12
MANIFEST.in
|
|
@ -1,10 +1,16 @@
|
||||||
recursive-include src/tl/tl *.cc *.h
|
recursive-include src/ant/ant *.cc *.h
|
||||||
recursive-include src/db/db *.cc *.cc_gen *.h
|
recursive-include src/db/db *.cc *.cc_gen *.h
|
||||||
|
recursive-include src/edt/edt *.cc *.h
|
||||||
recursive-include src/gsi/gsi *.cc *.h
|
recursive-include src/gsi/gsi *.cc *.h
|
||||||
recursive-include src/rdb/rdb *.cc *.h
|
recursive-include src/img/img *.cc *.h
|
||||||
recursive-include src/pya/pya *.cc *.h
|
recursive-include src/laybasic/laybasic *.cc *.h
|
||||||
recursive-include src/lib/lib *.cc *.h
|
recursive-include src/lib/lib *.cc *.h
|
||||||
|
recursive-include src/lym/lym *.cc *.h
|
||||||
|
recursive-include src/pya/pya *.cc *.h
|
||||||
recursive-include src/pymod *.cc *.h
|
recursive-include src/pymod *.cc *.h
|
||||||
|
recursive-include src/rbastub *.cc *.h
|
||||||
|
recursive-include src/rdb/rdb *.cc *.h
|
||||||
|
recursive-include src/tl/tl *.cc *.h
|
||||||
include src/plugins/*/db_plugin/*.cc
|
include src/plugins/*/db_plugin/*.cc
|
||||||
include src/plugins/*/*/db_plugin/*.cc
|
include src/plugins/*/*/db_plugin/*.cc
|
||||||
include src/plugins/*/db_plugin/*.h
|
include src/plugins/*/db_plugin/*.h
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,6 @@ jobs:
|
||||||
vmImage: 'windows-2019' # other options: 'macOS-10.13', 'ubuntu-16.04'
|
vmImage: 'windows-2019' # other options: 'macOS-10.13', 'ubuntu-16.04'
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
# Python27:
|
|
||||||
# python.version: '2.7'
|
|
||||||
# cp35-cp35m-win_amd64.whl:
|
|
||||||
# python.version: '3.5'
|
|
||||||
# python.architecture: 'x64'
|
|
||||||
cp36-cp36m-win_amd64.whl:
|
cp36-cp36m-win_amd64.whl:
|
||||||
python.version: '3.6'
|
python.version: '3.6'
|
||||||
python.architecture: 'x64'
|
python.architecture: 'x64'
|
||||||
|
|
@ -34,9 +29,6 @@ jobs:
|
||||||
cp310-cp310-win_amd64.whl:
|
cp310-cp310-win_amd64.whl:
|
||||||
python.version: '3.10'
|
python.version: '3.10'
|
||||||
python.architecture: 'x64'
|
python.architecture: 'x64'
|
||||||
# cp35-cp35m-win32.whl:
|
|
||||||
# python.version: '3.5'
|
|
||||||
# python.architecture: 'x86'
|
|
||||||
cp36-cp36m-win32.whl:
|
cp36-cp36m-win32.whl:
|
||||||
python.version: '3.6'
|
python.version: '3.6'
|
||||||
python.architecture: 'x86'
|
python.architecture: 'x86'
|
||||||
|
|
@ -70,9 +62,9 @@ jobs:
|
||||||
#arguments: # Optional
|
#arguments: # Optional
|
||||||
script: | # Required when targetType == Inline
|
script: | # Required when targetType == Inline
|
||||||
pwd
|
pwd
|
||||||
Invoke-WebRequest -Uri "https://www.klayout.org/downloads/klayout-microbits-1.0.zip" -OutFile klayout-microbits-1.0.zip
|
Invoke-WebRequest -Uri "https://www.klayout.org/downloads/klayout-microbits-4.0.zip" -OutFile klayout-microbits-4.0.zip
|
||||||
dir
|
dir
|
||||||
Expand-Archive klayout-microbits-1.0.zip -DestinationPath klayout-microbits
|
Expand-Archive klayout-microbits-4.0.zip -DestinationPath klayout-microbits
|
||||||
dir klayout-microbits
|
dir klayout-microbits
|
||||||
#errorActionPreference: 'stop' # Optional. Options: stop, continue, silentlyContinue
|
#errorActionPreference: 'stop' # Optional. Options: stop, continue, silentlyContinue
|
||||||
#failOnStderr: false # Optional
|
#failOnStderr: false # Optional
|
||||||
|
|
@ -81,37 +73,30 @@ jobs:
|
||||||
#workingDirectory: # Optional
|
#workingDirectory: # Optional
|
||||||
displayName: 'Download and Extract KLayout bits'
|
displayName: 'Download and Extract KLayout bits'
|
||||||
|
|
||||||
# - script: |
|
|
||||||
# curl https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi -o VCForPython27.msi
|
|
||||||
# msiexec /i VCForPython27.msi /quiet
|
|
||||||
# set "VS90COMNTOOLS=C:\Users\VssAdministrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC"
|
|
||||||
# curl https://raw.githubusercontent.com/mattn/gntp-send/master/include/msinttypes/stdint.h -o "%VS90COMNTOOLS%\Include\stdint.h"
|
|
||||||
# dir "%VS90COMNTOOLS%\Include"
|
|
||||||
# condition: eq(variables['python.version'], '2.7')
|
|
||||||
# displayName: 'Install Microsoft Visual C++ Compiler for Python 2.7'
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
python -m pip install --upgrade pip setuptools wheel
|
python -m pip install --upgrade pip setuptools wheel
|
||||||
displayName: 'Update pip, setuptools and wheel'
|
displayName: 'Update pip, setuptools and wheel'
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
python -V
|
python -V
|
||||||
set "KLAYOUT_BITS=%cd%\klayout-microbits\klayout-microbits-1.0\msvc2017\%PYTHON_ARCHITECTURE%"
|
set "KLAYOUT_BITS=%cd%\klayout-microbits\klayout-microbits-4.0\msvc2017\%PYTHON_ARCHITECTURE%"
|
||||||
echo KLAYOUT_BITS=%KLAYOUT_BITS%
|
echo KLAYOUT_BITS=%KLAYOUT_BITS%
|
||||||
python setup.py bdist_wheel
|
python setup.py bdist_wheel
|
||||||
displayName: 'Build KLayout'
|
displayName: 'Build KLayout'
|
||||||
|
|
||||||
- bash: |
|
- bash: |
|
||||||
bash `pwd`/ci-scripts/windows/fix_wheel.sh `pwd`/dist/*.whl "`pwd`/klayout-microbits/klayout-microbits-1.0/msvc2017/$PYTHON_ARCHITECTURE"
|
bash `pwd`/ci-scripts/windows/fix_wheel.sh `pwd`/dist/*.whl "`pwd`/klayout-microbits/klayout-microbits-4.0/msvc2017/$PYTHON_ARCHITECTURE"
|
||||||
displayName: 'Copy klayout bits dlls into wheel'
|
displayName: 'Copy klayout bits dlls into wheel'
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
echo PATH=%PATH%
|
echo PATH=%PATH%
|
||||||
|
set TESTSRC=.
|
||||||
pip install klayout --no-index -f dist
|
pip install klayout --no-index -f dist
|
||||||
python testdata/pymod/import_db.py
|
python testdata/pymod/import_db.py
|
||||||
python testdata/pymod/import_rdb.py
|
python testdata/pymod/import_rdb.py
|
||||||
python testdata/pymod/import_tl.py
|
python testdata/pymod/import_tl.py
|
||||||
python testdata/pymod/import_lib.py
|
python testdata/pymod/import_lib.py
|
||||||
|
python testdata/pymod/import_lay.py
|
||||||
python testdata/pymod/pya_tests.py
|
python testdata/pymod/pya_tests.py
|
||||||
displayName: 'Test KLayout pymod'
|
displayName: 'Test KLayout pymod'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ set -xe
|
||||||
if [[ -f "/etc/centos-release" ]]; then
|
if [[ -f "/etc/centos-release" ]]; then
|
||||||
# sometimes the epel server is down. retry 5 times
|
# sometimes the epel server is down. retry 5 times
|
||||||
for i in $(seq 1 5); do
|
for i in $(seq 1 5); do
|
||||||
yum install -y zlib-devel curl-devel expat-devel ccache && s=0 && break || s=$? && sleep 15;
|
yum install -y zlib-devel curl-devel expat-devel libpng-devel ccache && s=0 && break || s=$? && sleep 15;
|
||||||
done
|
done
|
||||||
|
|
||||||
[ $s -eq 0 ] || exit $s
|
[ $s -eq 0 ] || exit $s
|
||||||
|
|
@ -27,7 +27,7 @@ if [[ -f "/etc/centos-release" ]]; then
|
||||||
elif [[ -f "/etc/alpine-release" ]]; then
|
elif [[ -f "/etc/alpine-release" ]]; then
|
||||||
# musllinux prep
|
# musllinux prep
|
||||||
# ccache already present
|
# ccache already present
|
||||||
apk add curl-dev expat-dev zlib-dev ccache
|
apk add curl-dev expat-dev zlib-dev libpng-dev ccache
|
||||||
export PATH="/usr/lib/ccache/bin:$PATH"
|
export PATH="/usr/lib/ccache/bin:$PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@ cp -v $KLAYOUT_BITS/curl/bin/* .
|
||||||
cp -v $KLAYOUT_BITS/expat/bin/* .
|
cp -v $KLAYOUT_BITS/expat/bin/* .
|
||||||
cp -v $KLAYOUT_BITS/ptw/bin/* .
|
cp -v $KLAYOUT_BITS/ptw/bin/* .
|
||||||
cp -v $KLAYOUT_BITS/zlib/bin/* .
|
cp -v $KLAYOUT_BITS/zlib/bin/* .
|
||||||
|
cp -v $KLAYOUT_BITS/png/bin/* .
|
||||||
# if [ $? -ne 0 ]; then
|
# if [ $? -ne 0 ]; then
|
||||||
# >&2 echo "ERROR: lib not found. Quitting."
|
# >&2 echo "ERROR: lib not found. Quitting."
|
||||||
# exit 1
|
# exit 1
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ test-command = [
|
||||||
"python {package}/testdata/pymod/import_rdb.py",
|
"python {package}/testdata/pymod/import_rdb.py",
|
||||||
"python {package}/testdata/pymod/import_tl.py",
|
"python {package}/testdata/pymod/import_tl.py",
|
||||||
"python {package}/testdata/pymod/import_lib.py",
|
"python {package}/testdata/pymod/import_lib.py",
|
||||||
"python {package}/testdata/pymod/pya_tests.py"
|
"python {package}/testdata/pymod/import_lay.py",
|
||||||
|
"TESTSRC={package} python {package}/testdata/pymod/pya_tests.py"
|
||||||
]
|
]
|
||||||
# Disable building PyPy wheels on all platforms
|
# Disable building PyPy wheels on all platforms
|
||||||
skip = "pp*"
|
skip = "pp*"
|
||||||
|
|
|
||||||
167
setup.py
167
setup.py
|
|
@ -28,6 +28,7 @@ The standalone libraries are basically extension modules.
|
||||||
Build requirements are:
|
Build requirements are:
|
||||||
* curl library
|
* curl library
|
||||||
* expat library
|
* expat library
|
||||||
|
* png library
|
||||||
|
|
||||||
The main challenge is to map KLayout's shared object architecture.
|
The main challenge is to map KLayout's shared object architecture.
|
||||||
The structure consists of the Python extension libraries and a bunch
|
The structure consists of the Python extension libraries and a bunch
|
||||||
|
|
@ -269,6 +270,7 @@ class Config(object):
|
||||||
if bits:
|
if bits:
|
||||||
return [quote_path("-I" + os.path.join(bits, "zlib", "include")),
|
return [quote_path("-I" + os.path.join(bits, "zlib", "include")),
|
||||||
quote_path("-I" + os.path.join(bits, "ptw", "include")),
|
quote_path("-I" + os.path.join(bits, "ptw", "include")),
|
||||||
|
quote_path("-I" + os.path.join(bits, "png", "include")),
|
||||||
quote_path("-I" + os.path.join(bits, "expat", "include")),
|
quote_path("-I" + os.path.join(bits, "expat", "include")),
|
||||||
quote_path("-I" + os.path.join(bits, "curl", "include"))]
|
quote_path("-I" + os.path.join(bits, "curl", "include"))]
|
||||||
else:
|
else:
|
||||||
|
|
@ -285,9 +287,13 @@ class Config(object):
|
||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
if mod == "_tl":
|
if mod == "_tl":
|
||||||
return [ "libcurl", "expat", "pthreadVCE2", "zlib", "wsock32" ]
|
return [ "libcurl", "expat", "pthreadVCE2", "zlib", "wsock32" ]
|
||||||
|
elif mod == "_laybasic":
|
||||||
|
return [ "libpng16" ]
|
||||||
else:
|
else:
|
||||||
if mod == "_tl":
|
if mod == "_tl":
|
||||||
return ['curl', 'expat']
|
return ['curl', 'expat']
|
||||||
|
elif mod == "_laybasic":
|
||||||
|
return [ 'png' ]
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def link_args(self, mod):
|
def link_args(self, mod):
|
||||||
|
|
@ -298,8 +304,9 @@ class Config(object):
|
||||||
args = ["/DLL"]
|
args = ["/DLL"]
|
||||||
bits = os.getenv("KLAYOUT_BITS")
|
bits = os.getenv("KLAYOUT_BITS")
|
||||||
if bits:
|
if bits:
|
||||||
args += [quote_path("/LIBPATH:" + os.path.join(bits, "zlib", "libraries")),
|
args += [quote_path("/LIBPATH:" + os.path.join(bits, "zlib", "lib")),
|
||||||
quote_path("/LIBPATH:" + os.path.join(bits, "ptw", "libraries")),
|
quote_path("/LIBPATH:" + os.path.join(bits, "ptw", "libraries")),
|
||||||
|
quote_path("/LIBPATH:" + os.path.join(bits, "png", "libraries")),
|
||||||
quote_path("/LIBPATH:" + os.path.join(bits, "expat", "libraries")),
|
quote_path("/LIBPATH:" + os.path.join(bits, "expat", "libraries")),
|
||||||
quote_path("/LIBPATH:" + os.path.join(bits, "curl", "libraries"))]
|
quote_path("/LIBPATH:" + os.path.join(bits, "curl", "libraries"))]
|
||||||
return args
|
return args
|
||||||
|
|
@ -334,7 +341,7 @@ class Config(object):
|
||||||
"""
|
"""
|
||||||
Returns the macros to use for building
|
Returns the macros to use for building
|
||||||
"""
|
"""
|
||||||
return [('HAVE_CURL', 1), ('HAVE_EXPAT', 1), ('KLAYOUT_MAJOR_VERSION', self.major_version()), ('KLAYOUT_MINOR_VERSION', self.minor_version())]
|
return [('HAVE_PNG', 1), ('HAVE_CURL', 1), ('HAVE_EXPAT', 1), ('KLAYOUT_MAJOR_VERSION', self.major_version()), ('KLAYOUT_MINOR_VERSION', self.minor_version())]
|
||||||
|
|
||||||
def minor_version(self):
|
def minor_version(self):
|
||||||
"""
|
"""
|
||||||
|
|
@ -425,6 +432,7 @@ _gsi = Library(config.root + '._gsi',
|
||||||
include_dirs=[_tl_path],
|
include_dirs=[_tl_path],
|
||||||
extra_objects=[config.path_of('_tl', _tl_path)],
|
extra_objects=[config.path_of('_tl', _tl_path)],
|
||||||
language='c++',
|
language='c++',
|
||||||
|
libraries=config.libraries('_gsi'),
|
||||||
extra_link_args=config.link_args('_gsi'),
|
extra_link_args=config.link_args('_gsi'),
|
||||||
extra_compile_args=config.compile_args('_gsi'),
|
extra_compile_args=config.compile_args('_gsi'),
|
||||||
sources=list(_gsi_sources))
|
sources=list(_gsi_sources))
|
||||||
|
|
@ -441,11 +449,29 @@ _pya = Library(config.root + '._pya',
|
||||||
include_dirs=[_tl_path, _gsi_path],
|
include_dirs=[_tl_path, _gsi_path],
|
||||||
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
|
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
|
||||||
language='c++',
|
language='c++',
|
||||||
|
libraries=config.libraries('_pya'),
|
||||||
extra_link_args=config.link_args('_pya'),
|
extra_link_args=config.link_args('_pya'),
|
||||||
extra_compile_args=config.compile_args('_pya'),
|
extra_compile_args=config.compile_args('_pya'),
|
||||||
sources=list(_pya_sources))
|
sources=list(_pya_sources))
|
||||||
config.add_extension(_pya)
|
config.add_extension(_pya)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# _rba dependency library (dummy)
|
||||||
|
|
||||||
|
_rba_path = os.path.join("src", "rbastub")
|
||||||
|
_rba_sources = set(glob.glob(os.path.join(_rba_path, "*.cc")))
|
||||||
|
|
||||||
|
_rba = Library(config.root + '._rba',
|
||||||
|
define_macros=config.macros() + [('MAKE_RBA_LIBRARY', 1)],
|
||||||
|
include_dirs=[_tl_path, _gsi_path],
|
||||||
|
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
|
||||||
|
language='c++',
|
||||||
|
libraries=config.libraries('_rba'),
|
||||||
|
extra_link_args=config.link_args('_rba'),
|
||||||
|
extra_compile_args=config.compile_args('_rba'),
|
||||||
|
sources=list(_rba_sources))
|
||||||
|
config.add_extension(_rba)
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# _db dependency library
|
# _db dependency library
|
||||||
|
|
||||||
|
|
@ -457,6 +483,7 @@ _db = Library(config.root + '._db',
|
||||||
include_dirs=[_tl_path, _gsi_path, _db_path],
|
include_dirs=[_tl_path, _gsi_path, _db_path],
|
||||||
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
|
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
|
||||||
language='c++',
|
language='c++',
|
||||||
|
libraries=config.libraries('_db'),
|
||||||
extra_link_args=config.link_args('_db'),
|
extra_link_args=config.link_args('_db'),
|
||||||
extra_compile_args=config.compile_args('_db'),
|
extra_compile_args=config.compile_args('_db'),
|
||||||
sources=list(_db_sources))
|
sources=list(_db_sources))
|
||||||
|
|
@ -473,6 +500,7 @@ _lib = Library(config.root + '._lib',
|
||||||
include_dirs=[_tl_path, _gsi_path, _db_path, _lib_path],
|
include_dirs=[_tl_path, _gsi_path, _db_path, _lib_path],
|
||||||
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||||
language='c++',
|
language='c++',
|
||||||
|
libraries=config.libraries('_lib'),
|
||||||
extra_link_args=config.link_args('_lib'),
|
extra_link_args=config.link_args('_lib'),
|
||||||
extra_compile_args=config.compile_args('_lib'),
|
extra_compile_args=config.compile_args('_lib'),
|
||||||
sources=list(_lib_sources))
|
sources=list(_lib_sources))
|
||||||
|
|
@ -489,11 +517,114 @@ _rdb = Library(config.root + '._rdb',
|
||||||
include_dirs=[_db_path, _tl_path, _gsi_path],
|
include_dirs=[_db_path, _tl_path, _gsi_path],
|
||||||
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||||
language='c++',
|
language='c++',
|
||||||
|
libraries=config.libraries('_rdb'),
|
||||||
extra_link_args=config.link_args('_rdb'),
|
extra_link_args=config.link_args('_rdb'),
|
||||||
extra_compile_args=config.compile_args('_rdb'),
|
extra_compile_args=config.compile_args('_rdb'),
|
||||||
sources=list(_rdb_sources))
|
sources=list(_rdb_sources))
|
||||||
config.add_extension(_rdb)
|
config.add_extension(_rdb)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# _laybasic dependency library
|
||||||
|
|
||||||
|
_laybasic_path = os.path.join("src", "laybasic", "laybasic")
|
||||||
|
_laybasic_sources = set(glob.glob(os.path.join(_laybasic_path, "*.cc")))
|
||||||
|
|
||||||
|
_laybasic = Library(config.root + '._laybasic',
|
||||||
|
define_macros=config.macros() + [('MAKE_LAYBASIC_LIBRARY', 1)],
|
||||||
|
include_dirs=[_rdb_path, _db_path, _tl_path, _gsi_path],
|
||||||
|
extra_objects=[config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||||
|
language='c++',
|
||||||
|
libraries=config.libraries('_laybasic'),
|
||||||
|
extra_link_args=config.link_args('_laybasic'),
|
||||||
|
extra_compile_args=config.compile_args('_laybasic'),
|
||||||
|
sources=list(_laybasic_sources))
|
||||||
|
config.add_extension(_laybasic)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# _layview dependency library
|
||||||
|
|
||||||
|
_layview_path = os.path.join("src", "layview", "layview")
|
||||||
|
_layview_sources = set(glob.glob(os.path.join(_layview_path, "*.cc")))
|
||||||
|
|
||||||
|
_layview = Library(config.root + '._layview',
|
||||||
|
define_macros=config.macros() + [('MAKE_LAYVIEW_LIBRARY', 1)],
|
||||||
|
include_dirs=[_laybasic_path, _rdb_path, _db_path, _tl_path, _gsi_path],
|
||||||
|
extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||||
|
language='c++',
|
||||||
|
libraries=config.libraries('_layview'),
|
||||||
|
extra_link_args=config.link_args('_layview'),
|
||||||
|
extra_compile_args=config.compile_args('_layview'),
|
||||||
|
sources=list(_layview_sources))
|
||||||
|
config.add_extension(_layview)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# _lym dependency library
|
||||||
|
|
||||||
|
_lym_path = os.path.join("src", "lym", "lym")
|
||||||
|
_lym_sources = set(glob.glob(os.path.join(_lym_path, "*.cc")))
|
||||||
|
|
||||||
|
_lym = Library(config.root + '._lym',
|
||||||
|
define_macros=config.macros() + [('MAKE_LYM_LIBRARY', 1)],
|
||||||
|
include_dirs=[_pya_path, _rba_path, _tl_path, _gsi_path],
|
||||||
|
extra_objects=[config.path_of('_rba', _rba_path), config.path_of('_pya', _pya_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
|
||||||
|
language='c++',
|
||||||
|
libraries=config.libraries('_lym'),
|
||||||
|
extra_link_args=config.link_args('_lym'),
|
||||||
|
extra_compile_args=config.compile_args('_lym'),
|
||||||
|
sources=list(_lym_sources))
|
||||||
|
config.add_extension(_lym)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# _ant dependency library
|
||||||
|
|
||||||
|
_ant_path = os.path.join("src", "ant", "ant")
|
||||||
|
_ant_sources = set(glob.glob(os.path.join(_ant_path, "*.cc")))
|
||||||
|
|
||||||
|
_ant = Library(config.root + '._ant',
|
||||||
|
define_macros=config.macros() + [('MAKE_ANT_LIBRARY', 1)],
|
||||||
|
include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
|
||||||
|
extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_layview', _layview_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||||
|
language='c++',
|
||||||
|
libraries=config.libraries('_ant'),
|
||||||
|
extra_link_args=config.link_args('_ant'),
|
||||||
|
extra_compile_args=config.compile_args('_ant'),
|
||||||
|
sources=list(_ant_sources))
|
||||||
|
config.add_extension(_ant)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# _img dependency library
|
||||||
|
|
||||||
|
_img_path = os.path.join("src", "img", "img")
|
||||||
|
_img_sources = set(glob.glob(os.path.join(_img_path, "*.cc")))
|
||||||
|
|
||||||
|
_img = Library(config.root + '._img',
|
||||||
|
define_macros=config.macros() + [('MAKE_IMG_LIBRARY', 1)],
|
||||||
|
include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
|
||||||
|
extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_layview', _layview_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||||
|
language='c++',
|
||||||
|
libraries=config.libraries('_img'),
|
||||||
|
extra_link_args=config.link_args('_img'),
|
||||||
|
extra_compile_args=config.compile_args('_img'),
|
||||||
|
sources=list(_img_sources))
|
||||||
|
config.add_extension(_img)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# _edt dependency library
|
||||||
|
|
||||||
|
_edt_path = os.path.join("src", "edt", "edt")
|
||||||
|
_edt_sources = set(glob.glob(os.path.join(_edt_path, "*.cc")))
|
||||||
|
|
||||||
|
_edt = Library(config.root + '._edt',
|
||||||
|
define_macros=config.macros() + [('MAKE_EDT_LIBRARY', 1)],
|
||||||
|
include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
|
||||||
|
extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_layview', _layview_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||||
|
language='c++',
|
||||||
|
libraries=config.libraries('_edt'),
|
||||||
|
extra_link_args=config.link_args('_edt'),
|
||||||
|
extra_compile_args=config.compile_args('_edt'),
|
||||||
|
sources=list(_edt_sources))
|
||||||
|
config.add_extension(_edt)
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# dependency libraries from db_plugins
|
# dependency libraries from db_plugins
|
||||||
|
|
||||||
|
|
@ -577,6 +708,36 @@ rdb = Extension(config.root + '.rdbcore',
|
||||||
extra_compile_args=config.compile_args('rdbcore'),
|
extra_compile_args=config.compile_args('rdbcore'),
|
||||||
sources=list(rdb_sources))
|
sources=list(rdb_sources))
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# lay extension library
|
||||||
|
|
||||||
|
lay_path = os.path.join("src", "pymod", "lay")
|
||||||
|
lay_sources = set(glob.glob(os.path.join(lay_path, "*.cc")))
|
||||||
|
|
||||||
|
lay = Extension(config.root + '.laycore',
|
||||||
|
define_macros=config.macros(),
|
||||||
|
include_dirs=[_laybasic_path,
|
||||||
|
_layview_path,
|
||||||
|
_img_path,
|
||||||
|
_ant_path,
|
||||||
|
_edt_path,
|
||||||
|
_lym_path,
|
||||||
|
_tl_path,
|
||||||
|
_gsi_path,
|
||||||
|
_pya_path],
|
||||||
|
extra_objects=[config.path_of('_laybasic', _laybasic_path),
|
||||||
|
config.path_of('_layview', _layview_path),
|
||||||
|
config.path_of('_img', _img_path),
|
||||||
|
config.path_of('_ant', _ant_path),
|
||||||
|
config.path_of('_edt', _edt_path),
|
||||||
|
config.path_of('_lym', _lym_path),
|
||||||
|
config.path_of('_tl', _tl_path),
|
||||||
|
config.path_of('_gsi', _gsi_path),
|
||||||
|
config.path_of('_pya', _pya_path)],
|
||||||
|
extra_link_args=config.link_args('laycore'),
|
||||||
|
extra_compile_args=config.compile_args('laycore'),
|
||||||
|
sources=list(lay_sources))
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# Core setup function
|
# Core setup function
|
||||||
|
|
||||||
|
|
@ -602,4 +763,4 @@ if __name__ == '__main__':
|
||||||
url='https://github.com/klayout/klayout',
|
url='https://github.com/klayout/klayout',
|
||||||
packages=find_packages('src/pymod/distutils_src'),
|
packages=find_packages('src/pymod/distutils_src'),
|
||||||
package_dir={'': 'src/pymod/distutils_src'}, # https://github.com/pypa/setuptools/issues/230
|
package_dir={'': 'src/pymod/distutils_src'}, # https://github.com/pypa/setuptools/issues/230
|
||||||
ext_modules=[_tl, _gsi, _pya, _db, _lib, _rdb] + db_plugins + [tl, db, lib, rdb])
|
ext_modules=[_tl, _gsi, _pya, _rba, _db, _lib, _rdb, _lym, _laybasic, _layview, _ant, _edt, _img] + db_plugins + [tl, db, lib, rdb, lay])
|
||||||
|
|
|
||||||
|
|
@ -6,16 +6,7 @@ include($$PWD/../../lib.pri)
|
||||||
|
|
||||||
DEFINES += MAKE_ANT_LIBRARY
|
DEFINES += MAKE_ANT_LIBRARY
|
||||||
|
|
||||||
HEADERS = \
|
!equals(HAVE_QT, "0") {
|
||||||
antConfig.h \
|
|
||||||
antConfigPage.h \
|
|
||||||
antObject.h \
|
|
||||||
antPlugin.h \
|
|
||||||
antPropertiesPage.h \
|
|
||||||
antService.h \
|
|
||||||
antTemplate.h \
|
|
||||||
antForceLink.h \
|
|
||||||
antCommon.h
|
|
||||||
|
|
||||||
FORMS = \
|
FORMS = \
|
||||||
RulerConfigPage.ui \
|
RulerConfigPage.ui \
|
||||||
|
|
@ -24,18 +15,48 @@ FORMS = \
|
||||||
RulerConfigPage4.ui \
|
RulerConfigPage4.ui \
|
||||||
RulerPropertiesPage.ui \
|
RulerPropertiesPage.ui \
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disabled without Qt:
|
||||||
|
|
||||||
|
HEADERS = \
|
||||||
|
antConfigPage.h \
|
||||||
|
antPropertiesPage.h \
|
||||||
|
|
||||||
SOURCES = \
|
SOURCES = \
|
||||||
antConfig.cc \
|
|
||||||
antConfigPage.cc \
|
antConfigPage.cc \
|
||||||
|
antPropertiesPage.cc \
|
||||||
|
|
||||||
|
# Enabled without Qt:
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
antConfig.h \
|
||||||
|
antObject.h \
|
||||||
|
antPlugin.h \
|
||||||
|
antService.h \
|
||||||
|
antTemplate.h \
|
||||||
|
antForceLink.h \
|
||||||
|
antCommon.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
antConfig.cc \
|
||||||
antObject.cc \
|
antObject.cc \
|
||||||
antPlugin.cc \
|
antPlugin.cc \
|
||||||
antPropertiesPage.cc \
|
|
||||||
antService.cc \
|
antService.cc \
|
||||||
antTemplate.cc \
|
antTemplate.cc \
|
||||||
gsiDeclAnt.cc \
|
gsiDeclAnt.cc \
|
||||||
antForceLink.cc
|
antForceLink.cc
|
||||||
|
|
||||||
INCLUDEPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
INCLUDEPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$LAYVIEW_INC $$DB_INC
|
||||||
DEPENDPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
DEPENDPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$LAYVIEW_INC $$DB_INC
|
||||||
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_gsi -lklayout_laybasic -lklayout_db
|
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_gsi -lklayout_laybasic -lklayout_layview -lklayout_db
|
||||||
|
|
||||||
|
!equals(HAVE_QT, "0") {
|
||||||
|
|
||||||
|
INCLUDEPATH += $$LAYUI_INC
|
||||||
|
DEPENDPATH += $$LAYUI_INC
|
||||||
|
|
||||||
|
LIBS += -lklayout_layui
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "antConfigPage.h"
|
#include "antConfigPage.h"
|
||||||
#include "ui_RulerConfigPage.h"
|
#include "ui_RulerConfigPage.h"
|
||||||
|
|
@ -417,3 +418,5 @@ ConfigPage4::commit ()
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ant
|
} // namespace ant
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,13 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_antConfigPage
|
#ifndef HDR_antConfigPage
|
||||||
#define HDR_antConfigPage
|
#define HDR_antConfigPage
|
||||||
|
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
|
#include "layPluginConfigPage.h"
|
||||||
#include "antTemplate.h"
|
#include "antTemplate.h"
|
||||||
|
|
||||||
class QListWidgetItem;
|
class QListWidgetItem;
|
||||||
|
|
@ -133,3 +134,5 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "antForceLink.h"
|
#include "antForceLink.h"
|
||||||
|
|
||||||
namespace ant
|
namespace ant
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
namespace ant
|
namespace ant
|
||||||
{
|
{
|
||||||
ANT_PUBLIC int _force_link_f ();
|
ANT_PUBLIC int _force_link_f ();
|
||||||
int _force_link_target = _force_link_f ();
|
static int _force_link_target = _force_link_f ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -284,7 +284,7 @@ public:
|
||||||
void execute (const tl::ExpressionParserContext &context, tl::Variant &out, const std::vector <tl::Variant> &vv) const
|
void execute (const tl::ExpressionParserContext &context, tl::Variant &out, const std::vector <tl::Variant> &vv) const
|
||||||
{
|
{
|
||||||
if (vv.size () != 0) {
|
if (vv.size () != 0) {
|
||||||
throw tl::EvalError (tl::to_string (QObject::tr ("Annotation function must not have arguments")), context);
|
throw tl::EvalError (tl::to_string (tr ("Annotation function must not have arguments")), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Object &obj = mp_eval->obj ();
|
const Object &obj = mp_eval->obj ();
|
||||||
|
|
|
||||||
|
|
@ -22,15 +22,22 @@
|
||||||
|
|
||||||
|
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
#include "layAbstractMenu.h"
|
|
||||||
#include "layConverters.h"
|
#include "layConverters.h"
|
||||||
#include "layConfigurationDialog.h"
|
|
||||||
#include "layDispatcher.h"
|
#include "layDispatcher.h"
|
||||||
#include "antConfigPage.h"
|
#include "layColor.h"
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
# include "layConfigurationDialog.h"
|
||||||
|
# include "layAbstractMenu.h"
|
||||||
|
#endif
|
||||||
#include "antConfig.h"
|
#include "antConfig.h"
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
# include "antConfigPage.h"
|
||||||
|
#endif
|
||||||
#include "antPlugin.h"
|
#include "antPlugin.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#if defined(HAVE_QT)
|
||||||
|
# include <QApplication>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace ant
|
namespace ant
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +67,7 @@ PluginDeclaration::get_options (std::vector < std::pair<std::string, std::string
|
||||||
{
|
{
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_max_number_of_rulers, "-1"));
|
options.push_back (std::pair<std::string, std::string> (cfg_max_number_of_rulers, "-1"));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_snap_range, "8"));
|
options.push_back (std::pair<std::string, std::string> (cfg_ruler_snap_range, "8"));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_color, lay::ColorConverter ().to_string (QColor ())));
|
options.push_back (std::pair<std::string, std::string> (cfg_ruler_color, lay::ColorConverter ().to_string (lay::Color ())));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_halo, "true"));
|
options.push_back (std::pair<std::string, std::string> (cfg_ruler_halo, "true"));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_snap_mode, ACConverter ().to_string (lay::AC_Any)));
|
options.push_back (std::pair<std::string, std::string> (cfg_ruler_snap_mode, ACConverter ().to_string (lay::AC_Any)));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_obj_snap, tl::to_string (true)));
|
options.push_back (std::pair<std::string, std::string> (cfg_ruler_obj_snap, tl::to_string (true)));
|
||||||
|
|
@ -70,28 +77,30 @@ PluginDeclaration::get_options (std::vector < std::pair<std::string, std::string
|
||||||
// grid-micron is not configured here since some other entity is supposed to do this.
|
// grid-micron is not configured here since some other entity is supposed to do this.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
std::vector<std::pair <std::string, lay::ConfigPage *> >
|
std::vector<std::pair <std::string, lay::ConfigPage *> >
|
||||||
PluginDeclaration::config_pages (QWidget *parent) const
|
PluginDeclaration::config_pages (QWidget *parent) const
|
||||||
{
|
{
|
||||||
std::vector<std::pair <std::string, lay::ConfigPage *> > pages;
|
std::vector<std::pair <std::string, lay::ConfigPage *> > pages;
|
||||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Snapping")), new ant::ConfigPage (parent)));
|
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Snapping")), new ant::ConfigPage (parent)));
|
||||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Appearance")), new ant::ConfigPage2 (parent)));
|
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Appearance")), new ant::ConfigPage2 (parent)));
|
||||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Angle")), new ant::ConfigPage3 (parent)));
|
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Angle")), new ant::ConfigPage3 (parent)));
|
||||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Templates")), new ant::ConfigPage4 (parent)));
|
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Templates")), new ant::ConfigPage4 (parent)));
|
||||||
return pages;
|
return pages;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
PluginDeclaration::get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const
|
PluginDeclaration::get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const
|
||||||
{
|
{
|
||||||
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
||||||
menu_entries.push_back (lay::separator ("rulers_group", "edit_menu.end"));
|
menu_entries.push_back (lay::separator ("rulers_group", "edit_menu.end"));
|
||||||
menu_entries.push_back (lay::menu_item ("ant::clear_all_rulers", "clear_all_rulers:edit", "edit_menu.end", tl::to_string (QObject::tr ("Clear All Rulers And Annotations(Ctrl+K)"))));
|
menu_entries.push_back (lay::menu_item ("ant::clear_all_rulers", "clear_all_rulers:edit", "edit_menu.end", tl::to_string (tr ("Clear All Rulers And Annotations(Ctrl+K)"))));
|
||||||
menu_entries.push_back (lay::menu_item ("ant::configure", "configure_rulers", "edit_menu.end", tl::to_string (QObject::tr ("Ruler And Annotation Setup"))));
|
menu_entries.push_back (lay::menu_item ("ant::configure", "configure_rulers", "edit_menu.end", tl::to_string (tr ("Ruler And Annotation Setup"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
lay::Plugin *
|
lay::Plugin *
|
||||||
PluginDeclaration::create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutView *view) const
|
PluginDeclaration::create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
return new ant::Service (manager, view);
|
return new ant::Service (manager, view);
|
||||||
}
|
}
|
||||||
|
|
@ -101,8 +110,10 @@ PluginDeclaration::menu_activated (const std::string &symbol) const
|
||||||
{
|
{
|
||||||
if (symbol == "ant::configure") {
|
if (symbol == "ant::configure") {
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::ConfigurationDialog config_dialog (QApplication::activeWindow (), lay::Dispatcher::instance (), "ant::Plugin");
|
lay::ConfigurationDialog config_dialog (QApplication::activeWindow (), lay::Dispatcher::instance (), "ant::Plugin");
|
||||||
config_dialog.exec ();
|
config_dialog.exec ();
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -114,14 +125,14 @@ PluginDeclaration::menu_activated (const std::string &symbol) const
|
||||||
bool
|
bool
|
||||||
PluginDeclaration::implements_editable (std::string &title) const
|
PluginDeclaration::implements_editable (std::string &title) const
|
||||||
{
|
{
|
||||||
title = tl::to_string (QObject::tr ("Rulers And Annotations"));
|
title = tl::to_string (tr ("Rulers And Annotations"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PluginDeclaration::implements_mouse_mode (std::string &title) const
|
PluginDeclaration::implements_mouse_mode (std::string &title) const
|
||||||
{
|
{
|
||||||
title = "ruler:ruler_mode_group:ruler_templates_group\t" + tl::to_string (QObject::tr ("Ruler{Add rulers and annotations}")) + "<:ruler.png>";
|
title = "ruler:ruler_mode_group:ruler_templates_group\t" + tl::to_string (tr ("Ruler{Add rulers and annotations}")) + "<:ruler.png>";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -182,17 +193,17 @@ PluginDeclaration::initialized (lay::Dispatcher *root)
|
||||||
|
|
||||||
// Set up the templates we want to see (plus some non-categorized templates)
|
// Set up the templates we want to see (plus some non-categorized templates)
|
||||||
|
|
||||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Ruler")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_ruler"));
|
m_templates.push_back (ant::Template (tl::to_string (tr ("Ruler")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_ruler"));
|
||||||
|
|
||||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Cross")), "", "", "$U,$V", ant::Object::STY_cross_both, ant::Object::OL_diag, true, lay::AC_Global, "_cross"));
|
m_templates.push_back (ant::Template (tl::to_string (tr ("Cross")), "", "", "$U,$V", ant::Object::STY_cross_both, ant::Object::OL_diag, true, lay::AC_Global, "_cross"));
|
||||||
m_templates.back ().set_mode (ant::Template::RulerSingleClick);
|
m_templates.back ().set_mode (ant::Template::RulerSingleClick);
|
||||||
|
|
||||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Measure")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_measure"));
|
m_templates.push_back (ant::Template (tl::to_string (tr ("Measure")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_measure"));
|
||||||
m_templates.back ().set_mode (ant::Template::RulerAutoMetric);
|
m_templates.back ().set_mode (ant::Template::RulerAutoMetric);
|
||||||
|
|
||||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Ellipse")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_ellipse, true, lay::AC_Global, std::string ()));
|
m_templates.push_back (ant::Template (tl::to_string (tr ("Ellipse")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_ellipse, true, lay::AC_Global, std::string ()));
|
||||||
|
|
||||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Box")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_box, true, lay::AC_Global, std::string ()));
|
m_templates.push_back (ant::Template (tl::to_string (tr ("Box")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_box, true, lay::AC_Global, std::string ()));
|
||||||
|
|
||||||
root->config_set (cfg_ruler_templates, ant::TemplatesConverter ().to_string (m_templates));
|
root->config_set (cfg_ruler_templates, ant::TemplatesConverter ().to_string (m_templates));
|
||||||
root->config_end ();
|
root->config_end ();
|
||||||
|
|
@ -203,12 +214,15 @@ PluginDeclaration::initialized (lay::Dispatcher *root)
|
||||||
void
|
void
|
||||||
PluginDeclaration::uninitialize (lay::Dispatcher *)
|
PluginDeclaration::uninitialize (lay::Dispatcher *)
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_QT)
|
||||||
m_actions.clear ();
|
m_actions.clear ();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PluginDeclaration::update_current_template ()
|
PluginDeclaration::update_current_template ()
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
||||||
if (! mp || ! mp->has_ui ()) {
|
if (! mp || ! mp->has_ui ()) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -234,11 +248,13 @@ PluginDeclaration::update_current_template ()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PluginDeclaration::update_menu ()
|
PluginDeclaration::update_menu ()
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
||||||
if (! mp || ! mp->has_ui ()) {
|
if (! mp || ! mp->has_ui ()) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -278,7 +294,7 @@ PluginDeclaration::update_menu ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@
|
||||||
namespace ant
|
namespace ant
|
||||||
{
|
{
|
||||||
|
|
||||||
|
class Template;
|
||||||
|
|
||||||
class PluginDeclaration
|
class PluginDeclaration
|
||||||
: public lay::PluginDeclaration
|
: public lay::PluginDeclaration
|
||||||
{
|
{
|
||||||
|
|
@ -40,11 +42,13 @@ public:
|
||||||
|
|
||||||
virtual void get_options (std::vector < std::pair<std::string, std::string> > &options) const;
|
virtual void get_options (std::vector < std::pair<std::string, std::string> > &options) const;
|
||||||
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const;
|
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const;
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutView *view) const;
|
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutViewBase *view) const;
|
||||||
virtual bool implements_editable (std::string &title) const;
|
virtual bool implements_editable (std::string &title) const;
|
||||||
virtual bool implements_mouse_mode (std::string &title) const;
|
virtual bool implements_mouse_mode (std::string &title) const;
|
||||||
virtual bool configure (const std::string &name, const std::string &value);
|
virtual bool configure (const std::string &name, const std::string &value);
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual std::vector<std::pair <std::string, lay::ConfigPage *> > config_pages (QWidget *parent) const;
|
virtual std::vector<std::pair <std::string, lay::ConfigPage *> > config_pages (QWidget *parent) const;
|
||||||
|
#endif
|
||||||
virtual void config_finalize ();
|
virtual void config_finalize ();
|
||||||
virtual void initialized (lay::Dispatcher *);
|
virtual void initialized (lay::Dispatcher *);
|
||||||
virtual void uninitialize (lay::Dispatcher *);
|
virtual void uninitialize (lay::Dispatcher *);
|
||||||
|
|
@ -60,7 +64,9 @@ private:
|
||||||
|
|
||||||
std::vector<ant::Template> m_templates;
|
std::vector<ant::Template> m_templates;
|
||||||
int m_current_template;
|
int m_current_template;
|
||||||
|
#if defined(HAVE_QT)
|
||||||
tl::weak_collection<lay::ConfigureAction> m_actions;
|
tl::weak_collection<lay::ConfigureAction> m_actions;
|
||||||
|
#endif
|
||||||
bool m_current_template_updated;
|
bool m_current_template_updated;
|
||||||
bool m_templates_updated;
|
bool m_templates_updated;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,10 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "antPropertiesPage.h"
|
#include "antPropertiesPage.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layQtTools.h"
|
#include "layQtTools.h"
|
||||||
|
|
||||||
namespace ant
|
namespace ant
|
||||||
|
|
@ -365,3 +366,4 @@ PropertiesPage::apply ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_antPropertiesPage
|
#ifndef HDR_antPropertiesPage
|
||||||
#define HDR_antPropertiesPage
|
#define HDR_antPropertiesPage
|
||||||
|
|
@ -70,3 +71,5 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,17 @@
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
#include "layRenderer.h"
|
#include "layRenderer.h"
|
||||||
#include "laySnap.h"
|
#include "laySnap.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "laybasicConfig.h"
|
#include "laybasicConfig.h"
|
||||||
#include "layConverters.h"
|
#include "layConverters.h"
|
||||||
#include "layLayoutCanvas.h"
|
#include "layLayoutCanvas.h"
|
||||||
#include "layProperties.h"
|
#if defined(HAVE_QT)
|
||||||
|
# include "layProperties.h"
|
||||||
|
#endif
|
||||||
#include "antService.h"
|
#include "antService.h"
|
||||||
#include "antPropertiesPage.h"
|
#if defined(HAVE_QT)
|
||||||
|
# include "antPropertiesPage.h"
|
||||||
|
#endif
|
||||||
#include "antConfig.h"
|
#include "antConfig.h"
|
||||||
|
|
||||||
namespace ant
|
namespace ant
|
||||||
|
|
@ -759,9 +763,9 @@ View::render (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas)
|
||||||
|
|
||||||
int basic_width = int(0.5 + 1.0 / canvas.resolution ());
|
int basic_width = int(0.5 + 1.0 / canvas.resolution ());
|
||||||
|
|
||||||
QColor c (mp_rulers->color ());
|
lay::Color c (mp_rulers->color ());
|
||||||
if (! c.isValid ()) {
|
if (! c.is_valid ()) {
|
||||||
c = QColor (canvas.foreground_color ().rgb ());
|
c = canvas.foreground_color ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// obtain bitmap to render on
|
// obtain bitmap to render on
|
||||||
|
|
@ -784,7 +788,7 @@ View::render (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas)
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
// ant::Service implementation
|
// ant::Service implementation
|
||||||
|
|
||||||
Service::Service (db::Manager *manager, lay::LayoutView *view)
|
Service::Service (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: lay::EditorServiceBase (view),
|
: lay::EditorServiceBase (view),
|
||||||
lay::Drawing (1/*number of planes*/, view->drawings ()),
|
lay::Drawing (1/*number of planes*/, view->drawings ()),
|
||||||
db::Object (manager),
|
db::Object (manager),
|
||||||
|
|
@ -819,7 +823,7 @@ Service::configure (const std::string &name, const std::string &value)
|
||||||
|
|
||||||
if (name == cfg_ruler_color) {
|
if (name == cfg_ruler_color) {
|
||||||
|
|
||||||
QColor color;
|
lay::Color color;
|
||||||
lay::ColorConverter ().from_string (value, color);
|
lay::ColorConverter ().from_string (value, color);
|
||||||
|
|
||||||
// make the color available for the dynamic view objects too.
|
// make the color available for the dynamic view objects too.
|
||||||
|
|
@ -910,7 +914,7 @@ Service::annotations_changed ()
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector <lay::ViewOp>
|
std::vector <lay::ViewOp>
|
||||||
Service::get_view_ops (lay::RedrawThreadCanvas &canvas, QColor background, QColor foreground, QColor /*active*/) const
|
Service::get_view_ops (lay::RedrawThreadCanvas &canvas, lay::Color background, lay::Color foreground, lay::Color /*active*/) const
|
||||||
{
|
{
|
||||||
int basic_width = int(0.5 + 1.0 / canvas.resolution ());
|
int basic_width = int(0.5 + 1.0 / canvas.resolution ());
|
||||||
|
|
||||||
|
|
@ -920,7 +924,7 @@ Service::get_view_ops (lay::RedrawThreadCanvas &canvas, QColor background, QColo
|
||||||
if (m_halo) {
|
if (m_halo) {
|
||||||
view_ops.push_back (lay::ViewOp (background.rgb (), lay::ViewOp::Copy, 0, 0, 0, lay::ViewOp::Rect, 3 * basic_width, 0));
|
view_ops.push_back (lay::ViewOp (background.rgb (), lay::ViewOp::Copy, 0, 0, 0, lay::ViewOp::Rect, 3 * basic_width, 0));
|
||||||
}
|
}
|
||||||
if (m_color.isValid ()) {
|
if (m_color.is_valid ()) {
|
||||||
view_ops.push_back (lay::ViewOp (m_color.rgb (), lay::ViewOp::Copy, 0, 0, 0, lay::ViewOp::Rect, basic_width, 0));
|
view_ops.push_back (lay::ViewOp (m_color.rgb (), lay::ViewOp::Copy, 0, 0, 0, lay::ViewOp::Rect, basic_width, 0));
|
||||||
} else {
|
} else {
|
||||||
view_ops.push_back (lay::ViewOp (foreground.rgb (), lay::ViewOp::Copy, 0, 0, 0, lay::ViewOp::Rect, basic_width, 0));
|
view_ops.push_back (lay::ViewOp (foreground.rgb (), lay::ViewOp::Copy, 0, 0, 0, lay::ViewOp::Rect, basic_width, 0));
|
||||||
|
|
@ -1525,7 +1529,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
|
|
||||||
// begin the transaction
|
// begin the transaction
|
||||||
tl_assert (! manager ()->transacting ());
|
tl_assert (! manager ()->transacting ());
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create ruler")));
|
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||||
|
|
||||||
m_current = ant::Object (pt, pt, 0, tpl);
|
m_current = ant::Object (pt, pt, 0, tpl);
|
||||||
show_message ();
|
show_message ();
|
||||||
|
|
@ -1562,7 +1566,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
|
|
||||||
// begin the transaction
|
// begin the transaction
|
||||||
tl_assert (! manager ()->transacting ());
|
tl_assert (! manager ()->transacting ());
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create ruler")));
|
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||||
|
|
||||||
m_current = ant::Object (ee.first, ee.second, 0, tpl);
|
m_current = ant::Object (ee.first, ee.second, 0, tpl);
|
||||||
show_message ();
|
show_message ();
|
||||||
|
|
@ -1598,7 +1602,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
|
|
||||||
// begin the transaction
|
// begin the transaction
|
||||||
tl_assert (! manager ()->transacting ());
|
tl_assert (! manager ()->transacting ());
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create ruler")));
|
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||||
|
|
||||||
show_message ();
|
show_message ();
|
||||||
|
|
||||||
|
|
@ -2160,19 +2164,21 @@ Service::display_status (bool transient)
|
||||||
|
|
||||||
std::string msg;
|
std::string msg;
|
||||||
if (! transient) {
|
if (! transient) {
|
||||||
msg = tl::to_string (QObject::tr ("selected: "));
|
msg = tl::to_string (tr ("selected: "));
|
||||||
}
|
}
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("annotation(d=%s x=%s y=%s)")), ruler->text (), ruler->text_x (), ruler->text_y ());
|
msg += tl::sprintf (tl::to_string (tr ("annotation(d=%s x=%s y=%s)")), ruler->text (), ruler->text_x (), ruler->text_y ());
|
||||||
view ()->message (msg);
|
view ()->message (msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::PropertiesPage *
|
lay::PropertiesPage *
|
||||||
Service::properties_page (db::Manager *manager, QWidget *parent)
|
Service::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
{
|
{
|
||||||
return new PropertiesPage (this, manager, parent);
|
return new PropertiesPage (this, manager, parent);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
Service::get_selection (std::vector <obj_iterator> &sel) const
|
Service::get_selection (std::vector <obj_iterator> &sel) const
|
||||||
|
|
@ -2248,7 +2254,7 @@ Service::menu_activated (const std::string &symbol)
|
||||||
if (symbol == "ant::clear_all_rulers_internal") {
|
if (symbol == "ant::clear_all_rulers_internal") {
|
||||||
clear_rulers ();
|
clear_rulers ();
|
||||||
} else if (symbol == "ant::clear_all_rulers") {
|
} else if (symbol == "ant::clear_all_rulers") {
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Clear all rulers")));
|
manager ()->transaction (tl::to_string (tr ("Clear all rulers")));
|
||||||
clear_rulers ();
|
clear_rulers ();
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
namespace ant {
|
namespace ant {
|
||||||
|
|
||||||
class LayoutView;
|
class LayoutViewBase;
|
||||||
class LayoutCanvas;
|
class LayoutCanvas;
|
||||||
class Service;
|
class Service;
|
||||||
|
|
||||||
|
|
@ -201,7 +201,7 @@ public:
|
||||||
*/
|
*/
|
||||||
enum MoveMode { MoveNone, MoveP1, MoveP2, MoveP12, MoveP21, MoveP1X, MoveP2X, MoveP1Y, MoveP2Y, MoveRuler, MoveSelected };
|
enum MoveMode { MoveNone, MoveP1, MoveP2, MoveP12, MoveP21, MoveP1X, MoveP2X, MoveP1Y, MoveP2Y, MoveRuler, MoveSelected };
|
||||||
|
|
||||||
Service (db::Manager *manager, lay::LayoutView *view);
|
Service (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
|
|
||||||
~Service ();
|
~Service ();
|
||||||
|
|
||||||
|
|
@ -346,10 +346,12 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void transform (const db::DCplxTrans &trans);
|
virtual void transform (const db::DCplxTrans &trans);
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
/**
|
/**
|
||||||
* @brief Create the properties page
|
* @brief Create the properties page
|
||||||
*/
|
*/
|
||||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the selection for the properties page
|
* @brief Get the selection for the properties page
|
||||||
|
|
@ -387,7 +389,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Color accessor
|
* @brief Color accessor
|
||||||
*/
|
*/
|
||||||
QColor color () const
|
lay::Color color () const
|
||||||
{
|
{
|
||||||
return m_color;
|
return m_color;
|
||||||
}
|
}
|
||||||
|
|
@ -427,7 +429,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Access to the view object
|
* @brief Access to the view object
|
||||||
*/
|
*/
|
||||||
lay::LayoutView *view () const
|
lay::LayoutViewBase *view () const
|
||||||
{
|
{
|
||||||
return mp_view;
|
return mp_view;
|
||||||
}
|
}
|
||||||
|
|
@ -498,7 +500,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Ruler display and snapping configuration
|
// Ruler display and snapping configuration
|
||||||
QColor m_color;
|
lay::Color m_color;
|
||||||
bool m_halo;
|
bool m_halo;
|
||||||
lay::angle_constraint_type m_snap_mode;
|
lay::angle_constraint_type m_snap_mode;
|
||||||
double m_grid;
|
double m_grid;
|
||||||
|
|
@ -510,7 +512,7 @@ private:
|
||||||
int m_max_number_of_rulers;
|
int m_max_number_of_rulers;
|
||||||
|
|
||||||
// The layout view that the ruler service is attached to
|
// The layout view that the ruler service is attached to
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
|
|
||||||
// The ruler view objects representing the selection
|
// The ruler view objects representing the selection
|
||||||
// and the moved rules in move mode
|
// and the moved rules in move mode
|
||||||
|
|
@ -599,7 +601,7 @@ private:
|
||||||
/**
|
/**
|
||||||
* @brief implementation of the "Drawing" interface: configuration
|
* @brief implementation of the "Drawing" interface: configuration
|
||||||
*/
|
*/
|
||||||
std::vector <lay::ViewOp> get_view_ops (lay::RedrawThreadCanvas &canvas, QColor background, QColor foreground, QColor active) const;
|
std::vector <lay::ViewOp> get_view_ops (lay::RedrawThreadCanvas &canvas, lay::Color background, lay::Color foreground, lay::Color active) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Update m_rulers to reflect the selection
|
* @brief Update m_rulers to reflect the selection
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace ant
|
||||||
{
|
{
|
||||||
|
|
||||||
Template::Template ()
|
Template::Template ()
|
||||||
: m_title (tl::to_string (QObject::tr ("Ruler"))),
|
: m_title (tl::to_string (tr ("Ruler"))),
|
||||||
m_fmt_x ("$X"), m_fmt_y ("$Y"), m_fmt ("$D"),
|
m_fmt_x ("$X"), m_fmt_y ("$Y"), m_fmt ("$D"),
|
||||||
m_style (ant::Object::STY_ruler), m_outline (ant::Object::OL_diag),
|
m_style (ant::Object::STY_ruler), m_outline (ant::Object::OL_diag),
|
||||||
m_snap (true), m_angle_constraint (lay::AC_Global),
|
m_snap (true), m_angle_constraint (lay::AC_Global),
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include "antObject.h"
|
#include "antObject.h"
|
||||||
#include "antService.h"
|
#include "antService.h"
|
||||||
#include "antPlugin.h"
|
#include "antPlugin.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
|
|
||||||
namespace gsi
|
namespace gsi
|
||||||
{
|
{
|
||||||
|
|
@ -70,10 +70,10 @@ static int align_right () { return int (ant::Object::AL_right); }
|
||||||
static int align_top () { return int (ant::Object::AL_top); }
|
static int align_top () { return int (ant::Object::AL_top); }
|
||||||
static int align_up () { return int (ant::Object::AL_up); }
|
static int align_up () { return int (ant::Object::AL_up); }
|
||||||
|
|
||||||
static void clear_annotations (lay::LayoutView *view);
|
static void clear_annotations (lay::LayoutViewBase *view);
|
||||||
static void insert_annotation (lay::LayoutView *view, AnnotationRef *obj);
|
static void insert_annotation (lay::LayoutViewBase *view, AnnotationRef *obj);
|
||||||
static void erase_annotation (lay::LayoutView *view, int id);
|
static void erase_annotation_base (lay::LayoutViewBase *view, int id);
|
||||||
static void replace_annotation (lay::LayoutView *view, int id, const AnnotationRef &obj);
|
static void replace_annotation_base (lay::LayoutViewBase *view, int id, const AnnotationRef &obj);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief An extension of the ant::Object that provides "live" updates of the view
|
* @brief An extension of the ant::Object that provides "live" updates of the view
|
||||||
|
|
@ -88,7 +88,7 @@ public:
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
AnnotationRef (const ant::Object &other, lay::LayoutView *view)
|
AnnotationRef (const ant::Object &other, lay::LayoutViewBase *view)
|
||||||
: ant::Object (other), mp_view (view)
|
: ant::Object (other), mp_view (view)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
|
|
@ -132,7 +132,7 @@ public:
|
||||||
void erase ()
|
void erase ()
|
||||||
{
|
{
|
||||||
if (mp_view && id () >= 0) {
|
if (mp_view && id () >= 0) {
|
||||||
erase_annotation (mp_view.get (), id ());
|
erase_annotation_base (mp_view.get (), id ());
|
||||||
detach ();
|
detach ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -140,10 +140,10 @@ public:
|
||||||
template <class T>
|
template <class T>
|
||||||
AnnotationRef transformed (const T &t) const
|
AnnotationRef transformed (const T &t) const
|
||||||
{
|
{
|
||||||
return AnnotationRef (ant::Object::transformed<T> (t), const_cast<lay::LayoutView *> (mp_view.get ()));
|
return AnnotationRef (ant::Object::transformed<T> (t), const_cast<lay::LayoutViewBase *> (mp_view.get ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_view (lay::LayoutView *view)
|
void set_view (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
mp_view.reset (view);
|
mp_view.reset (view);
|
||||||
}
|
}
|
||||||
|
|
@ -152,15 +152,15 @@ protected:
|
||||||
void property_changed ()
|
void property_changed ()
|
||||||
{
|
{
|
||||||
if (mp_view && id () >= 0) {
|
if (mp_view && id () >= 0) {
|
||||||
replace_annotation (mp_view.get (), id (), *this);
|
replace_annotation_base (mp_view.get (), id (), *this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
tl::weak_ptr<lay::LayoutView> mp_view;
|
tl::weak_ptr<lay::LayoutViewBase> mp_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void clear_annotations (lay::LayoutView *view)
|
static void clear_annotations (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
if (ant_service) {
|
if (ant_service) {
|
||||||
|
|
@ -168,10 +168,10 @@ static void clear_annotations (lay::LayoutView *view)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void insert_annotation (lay::LayoutView *view, AnnotationRef *obj)
|
static void insert_annotation (lay::LayoutViewBase *view, AnnotationRef *obj)
|
||||||
{
|
{
|
||||||
if (obj->is_valid ()) {
|
if (obj->is_valid ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
throw tl::Exception (tl::to_string (tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
||||||
}
|
}
|
||||||
|
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
|
|
@ -182,7 +182,7 @@ static void insert_annotation (lay::LayoutView *view, AnnotationRef *obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void erase_annotation (lay::LayoutView *view, int id)
|
static void erase_annotation_base (lay::LayoutViewBase *view, int id)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
if (ant_service) {
|
if (ant_service) {
|
||||||
|
|
@ -195,7 +195,12 @@ static void erase_annotation (lay::LayoutView *view, int id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void replace_annotation (lay::LayoutView *view, int id, const AnnotationRef &obj)
|
static void erase_annotation (lay::LayoutViewBase *view, int id)
|
||||||
|
{
|
||||||
|
erase_annotation_base (view, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void replace_annotation_base (lay::LayoutViewBase *view, int id, const AnnotationRef &obj)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
if (ant_service) {
|
if (ant_service) {
|
||||||
|
|
@ -208,7 +213,12 @@ static void replace_annotation (lay::LayoutView *view, int id, const AnnotationR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static AnnotationRef create_measure_ruler (lay::LayoutView *view, const db::DPoint &pt, int angle_constraint)
|
static void replace_annotation (lay::LayoutViewBase *view, int id, const AnnotationRef &obj)
|
||||||
|
{
|
||||||
|
replace_annotation_base (view, id, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static AnnotationRef create_measure_ruler (lay::LayoutViewBase *view, const db::DPoint &pt, int angle_constraint)
|
||||||
{
|
{
|
||||||
std::vector<ant::Service *> ant_services = view->get_plugins <ant::Service> ();
|
std::vector<ant::Service *> ant_services = view->get_plugins <ant::Service> ();
|
||||||
if (! ant_services.empty ()) {
|
if (! ant_services.empty ()) {
|
||||||
|
|
@ -341,7 +351,7 @@ public:
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
AnnotationRefIterator (const ant::AnnotationIterator &iter, lay::LayoutView *view)
|
AnnotationRefIterator (const ant::AnnotationIterator &iter, lay::LayoutViewBase *view)
|
||||||
: ant::AnnotationIterator (iter), mp_view (view)
|
: ant::AnnotationIterator (iter), mp_view (view)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
|
|
@ -349,14 +359,14 @@ public:
|
||||||
|
|
||||||
reference operator* () const
|
reference operator* () const
|
||||||
{
|
{
|
||||||
return reference (ant::AnnotationIterator::operator* (), const_cast<lay::LayoutView * >(mp_view.get ()));
|
return reference (ant::AnnotationIterator::operator* (), const_cast<lay::LayoutViewBase * >(mp_view.get ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
tl::weak_ptr<lay::LayoutView> mp_view;
|
tl::weak_ptr<lay::LayoutViewBase> mp_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
static AnnotationRefIterator begin_annotations (lay::LayoutView *view)
|
static AnnotationRefIterator begin_annotations (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
if (ant_service) {
|
if (ant_service) {
|
||||||
|
|
@ -366,7 +376,7 @@ static AnnotationRefIterator begin_annotations (lay::LayoutView *view)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static AnnotationRef get_annotation (lay::LayoutView *view, int id)
|
static AnnotationRef get_annotation (lay::LayoutViewBase *view, int id)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
if (ant_service) {
|
if (ant_service) {
|
||||||
|
|
@ -379,21 +389,21 @@ static AnnotationRef get_annotation (lay::LayoutView *view, int id)
|
||||||
return AnnotationRef ();
|
return AnnotationRef ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static tl::Event &get_annotations_changed_event (lay::LayoutView *view)
|
static tl::Event &get_annotations_changed_event (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
tl_assert (ant_service != 0);
|
tl_assert (ant_service != 0);
|
||||||
return ant_service->annotations_changed_event;
|
return ant_service->annotations_changed_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
static tl::Event &get_annotation_selection_changed_event (lay::LayoutView *view)
|
static tl::Event &get_annotation_selection_changed_event (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
tl_assert (ant_service != 0);
|
tl_assert (ant_service != 0);
|
||||||
return ant_service->annotation_selection_changed_event;
|
return ant_service->annotation_selection_changed_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
static tl::event<int> &get_annotation_changed_event (lay::LayoutView *view)
|
static tl::event<int> &get_annotation_changed_event (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||||
tl_assert (ant_service != 0);
|
tl_assert (ant_service != 0);
|
||||||
|
|
@ -979,7 +989,7 @@ gsi::Class<AnnotationRef> decl_Annotation (decl_BasicAnnotation, "lay", "Annotat
|
||||||
);
|
);
|
||||||
|
|
||||||
static
|
static
|
||||||
gsi::ClassExt<lay::LayoutView> layout_view_decl (
|
gsi::ClassExt<lay::LayoutViewBase> layout_view_decl (
|
||||||
gsi::method_ext ("clear_annotations", &gsi::clear_annotations,
|
gsi::method_ext ("clear_annotations", &gsi::clear_annotations,
|
||||||
"@brief Clears all annotations on this view"
|
"@brief Clears all annotations on this view"
|
||||||
) +
|
) +
|
||||||
|
|
@ -1113,7 +1123,7 @@ private:
|
||||||
|
|
||||||
// extend the layout view by "edtService" specific methods
|
// extend the layout view by "edtService" specific methods
|
||||||
|
|
||||||
static bool has_annotation_selection (const lay::LayoutView *view)
|
static bool has_annotation_selection (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
std::vector<ant::Service *> ant_services = view->get_plugins <ant::Service> ();
|
std::vector<ant::Service *> ant_services = view->get_plugins <ant::Service> ();
|
||||||
for (std::vector<ant::Service *>::const_iterator s = ant_services.begin (); s != ant_services.end (); ++s) {
|
for (std::vector<ant::Service *>::const_iterator s = ant_services.begin (); s != ant_services.end (); ++s) {
|
||||||
|
|
@ -1124,13 +1134,13 @@ static bool has_annotation_selection (const lay::LayoutView *view)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static AnnotationSelectionIterator begin_annotations_selected (const lay::LayoutView *view)
|
static AnnotationSelectionIterator begin_annotations_selected (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
return AnnotationSelectionIterator (view->get_plugins <ant::Service> ());
|
return AnnotationSelectionIterator (view->get_plugins <ant::Service> ());
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
gsi::ClassExt<lay::LayoutView> layout_view_decl2 (
|
gsi::ClassExt<lay::LayoutViewBase> layout_view_decl2 (
|
||||||
gsi::method_ext ("has_annotation_selection?", &has_annotation_selection,
|
gsi::method_ext ("has_annotation_selection?", &has_annotation_selection,
|
||||||
"@brief Returns true, if annotations (rulers) are selected in this view"
|
"@brief Returns true, if annotations (rulers) are selected in this view"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
|
||||||
|
|
@ -408,7 +408,7 @@ BD_PUBLIC int strmxor (int argc, char *argv[])
|
||||||
db::Layout layout_b;
|
db::Layout layout_b;
|
||||||
|
|
||||||
{
|
{
|
||||||
tl::SelfTimer timer (tl::verbosity () >= 11, tl::to_string (QObject::tr ("Loading file (A): ")) + infile_a);
|
tl::SelfTimer timer (tl::verbosity () >= 11, tl::to_string (tr ("Loading file (A): ")) + infile_a);
|
||||||
|
|
||||||
db::LoadLayoutOptions load_options;
|
db::LoadLayoutOptions load_options;
|
||||||
generic_reader_options_a.configure (load_options);
|
generic_reader_options_a.configure (load_options);
|
||||||
|
|
@ -416,7 +416,7 @@ BD_PUBLIC int strmxor (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
tl::SelfTimer timer (tl::verbosity () >= 11, tl::to_string (QObject::tr ("Loading file (B): ")) + infile_b);
|
tl::SelfTimer timer (tl::verbosity () >= 11, tl::to_string (tr ("Loading file (B): ")) + infile_b);
|
||||||
|
|
||||||
db::LoadLayoutOptions load_options;
|
db::LoadLayoutOptions load_options;
|
||||||
generic_reader_options_b.configure (load_options);
|
generic_reader_options_b.configure (load_options);
|
||||||
|
|
|
||||||
|
|
@ -201,6 +201,8 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the first logical layer for a given layer specification
|
* @brief Returns the first logical layer for a given layer specification
|
||||||
|
* The first value of the pair indicates whether there is a valid mapping.
|
||||||
|
* The second value will give the layer to map to.
|
||||||
*/
|
*/
|
||||||
template <class L>
|
template <class L>
|
||||||
std::pair<bool, unsigned int> first_logical (const L &p) const
|
std::pair<bool, unsigned int> first_logical (const L &p) const
|
||||||
|
|
@ -215,6 +217,8 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the first logical layer for a given layer specification
|
* @brief Returns the first logical layer for a given layer specification
|
||||||
|
* The first value of the pair indicates whether there is a valid mapping.
|
||||||
|
* The second value will give the layer to map to.
|
||||||
*/
|
*/
|
||||||
template <class L>
|
template <class L>
|
||||||
std::pair<bool, unsigned int> first_logical (const L &p, db::Layout &layout) const
|
std::pair<bool, unsigned int> first_logical (const L &p, db::Layout &layout) const
|
||||||
|
|
@ -230,24 +234,21 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Query a layer mapping
|
* @brief Query a layer mapping
|
||||||
*
|
*
|
||||||
* @return A pair telling if the layer is mapped (first=true) and
|
* @return A set of layers which are designated targets.
|
||||||
* the logical layer mapped (second) if this is the case.
|
|
||||||
*/
|
*/
|
||||||
std::set<unsigned int> logical (const LDPair &p) const;
|
std::set<unsigned int> logical (const LDPair &p) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Query a layer mapping from a name
|
* @brief Query a layer mapping from a name
|
||||||
*
|
*
|
||||||
* @return A pair telling if the layer is mapped (first=true) and
|
* @return A set of layers which are designated targets.
|
||||||
* the logical layer mapped (second) if this is the case.
|
|
||||||
*/
|
*/
|
||||||
std::set<unsigned int> logical (const std::string &name) const;
|
std::set<unsigned int> logical (const std::string &name) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Query a layer mapping from a name or LDPair
|
* @brief Query a layer mapping from a name or LDPair
|
||||||
*
|
*
|
||||||
* @return A pair telling if the layer is mapped (first=true) and
|
* @return A set of layers which are designated targets.
|
||||||
* the logical layer mapped (second) if this is the case.
|
|
||||||
*
|
*
|
||||||
* @param p The layer that is looked for
|
* @param p The layer that is looked for
|
||||||
*/
|
*/
|
||||||
|
|
@ -256,8 +257,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Query or install a layer mapping from a name or LDPair
|
* @brief Query or install a layer mapping from a name or LDPair
|
||||||
*
|
*
|
||||||
* @return A pair telling if the layer is mapped (first=true) and
|
* @return A set of layers which are designated targets.
|
||||||
* the logical layer mapped (second) if this is the case.
|
|
||||||
*
|
*
|
||||||
* @param p The layer that is looked for
|
* @param p The layer that is looked for
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -6,25 +6,9 @@ include($$PWD/../../lib.pri)
|
||||||
|
|
||||||
DEFINES += MAKE_EDT_LIBRARY
|
DEFINES += MAKE_EDT_LIBRARY
|
||||||
|
|
||||||
HEADERS = \
|
!equals(HAVE_QT, "0") {
|
||||||
edtConfig.h \
|
|
||||||
edtDialogs.h \
|
|
||||||
edtEditorOptionsPages.h \
|
|
||||||
edtInstPropertiesPage.h \
|
|
||||||
edtMainService.h \
|
|
||||||
edtPartialService.h \
|
|
||||||
edtPCellParametersPage.h \
|
|
||||||
edtPlugin.h \
|
|
||||||
edtPropertiesPages.h \
|
|
||||||
edtPropertiesPageUtils.h \
|
|
||||||
edtService.h \
|
|
||||||
edtServiceImpl.h \
|
|
||||||
edtUtils.h \
|
|
||||||
edtCommon.h \
|
|
||||||
edtDistribute.h \
|
|
||||||
edtRecentConfigurationPage.h
|
|
||||||
|
|
||||||
FORMS = \
|
FORMS = \
|
||||||
AlignOptionsDialog.ui \
|
AlignOptionsDialog.ui \
|
||||||
BoxPropertiesPage.ui \
|
BoxPropertiesPage.ui \
|
||||||
CopyModeDialog.ui \
|
CopyModeDialog.ui \
|
||||||
|
|
@ -45,31 +29,65 @@ FORMS = \
|
||||||
DistributeOptionsDialog.ui \
|
DistributeOptionsDialog.ui \
|
||||||
EditorOptionsInstPCellParam.ui
|
EditorOptionsInstPCellParam.ui
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disabled without Qt:
|
||||||
|
|
||||||
|
HEADERS = \
|
||||||
|
edtDialogs.h \
|
||||||
|
edtEditorOptionsPages.h \
|
||||||
|
edtInstPropertiesPage.h \
|
||||||
|
edtPCellParametersPage.h \
|
||||||
|
edtPropertiesPages.h \
|
||||||
|
edtPropertiesPageUtils.h \
|
||||||
|
edtRecentConfigurationPage.h
|
||||||
|
|
||||||
SOURCES = \
|
SOURCES = \
|
||||||
edtConfig.cc \
|
|
||||||
edtDialogs.cc \
|
edtDialogs.cc \
|
||||||
edtEditorOptionsPages.cc \
|
edtEditorOptionsPages.cc \
|
||||||
edtInstPropertiesPage.cc \
|
edtInstPropertiesPage.cc \
|
||||||
edtMainService.cc \
|
|
||||||
edtPartialService.cc \
|
|
||||||
edtPCellParametersPage.cc \
|
edtPCellParametersPage.cc \
|
||||||
edtPlugin.cc \
|
|
||||||
edtPropertiesPages.cc \
|
edtPropertiesPages.cc \
|
||||||
edtPropertiesPageUtils.cc \
|
edtPropertiesPageUtils.cc \
|
||||||
|
edtRecentConfigurationPage.cc
|
||||||
|
|
||||||
|
# Enabled without Qt:
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
edtForceLink.h \
|
||||||
|
edtConfig.h \
|
||||||
|
edtMainService.h \
|
||||||
|
edtPartialService.h \
|
||||||
|
edtPlugin.h \
|
||||||
|
edtService.h \
|
||||||
|
edtServiceImpl.h \
|
||||||
|
edtUtils.h \
|
||||||
|
edtCommon.h \
|
||||||
|
edtDistribute.h \
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
edtForceLink.cc \
|
||||||
|
edtConfig.cc \
|
||||||
|
edtMainService.cc \
|
||||||
|
edtPartialService.cc \
|
||||||
|
edtPlugin.cc \
|
||||||
edtService.cc \
|
edtService.cc \
|
||||||
edtServiceImpl.cc \
|
edtServiceImpl.cc \
|
||||||
edtUtils.cc \
|
edtUtils.cc \
|
||||||
gsiDeclEdt.cc \
|
gsiDeclEdt.cc \
|
||||||
edtDistribute.cc \
|
edtDistribute.cc \
|
||||||
edtRecentConfigurationPage.cc
|
|
||||||
|
|
||||||
INCLUDEPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
INCLUDEPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$LAYVIEW_INC $$DB_INC
|
||||||
DEPENDPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
DEPENDPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$LAYVIEW_INC $$DB_INC
|
||||||
|
|
||||||
# Note: this accounts for UI-generated headers placed into the output folders in
|
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_gsi -lklayout_laybasic -lklayout_layview -lklayout_db
|
||||||
# shadow builds:
|
|
||||||
INCLUDEPATH += $$DESTDIR/laybasic/laybasic
|
|
||||||
DEPENDPATH += $$DESTDIR/laybasic/laybasic
|
|
||||||
|
|
||||||
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_gsi -lklayout_laybasic -lklayout_db
|
!equals(HAVE_QT, "0") {
|
||||||
|
|
||||||
|
INCLUDEPATH += $$LAYUI_INC
|
||||||
|
DEPENDPATH += $$LAYUI_INC
|
||||||
|
|
||||||
|
LIBS += -lklayout_layui
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -289,7 +289,7 @@ EditGridConverter::from_string_picky (const std::string &s, db::DVector &eg)
|
||||||
y = x;
|
y = x;
|
||||||
}
|
}
|
||||||
if (x < 1e-6 || y < 1e-6) {
|
if (x < 1e-6 || y < 1e-6) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The grid must be larger than zero")));
|
throw tl::Exception (tl::to_string (tr ("The grid must be larger than zero")));
|
||||||
}
|
}
|
||||||
eg = db::DVector (x, y);
|
eg = db::DVector (x, y);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,15 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "dbBox.h"
|
#include "dbBox.h"
|
||||||
#include "dbLayout.h"
|
#include "dbLayout.h"
|
||||||
|
|
||||||
#include "edtDialogs.h"
|
#include "edtDialogs.h"
|
||||||
#include "layObjectInstPath.h"
|
#include "layObjectInstPath.h"
|
||||||
#include "layCellView.h"
|
#include "layCellView.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layMarker.h"
|
#include "layMarker.h"
|
||||||
#include "tlException.h"
|
#include "tlException.h"
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
|
|
@ -103,7 +105,7 @@ InstantiationForm::double_clicked (QListWidgetItem *item)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
InstantiationForm::show (lay::LayoutView *view, const lay::ObjectInstPath &path)
|
InstantiationForm::show (lay::LayoutViewBase *view, const lay::ObjectInstPath &path)
|
||||||
{
|
{
|
||||||
mp_view = view;
|
mp_view = view;
|
||||||
mp_path = &path;
|
mp_path = &path;
|
||||||
|
|
@ -231,7 +233,7 @@ ChangeLayerOptionsDialog::~ChangeLayerOptionsDialog ()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ChangeLayerOptionsDialog::exec_dialog (lay::LayoutView *view, int cv_index, unsigned int &new_layer)
|
ChangeLayerOptionsDialog::exec_dialog (lay::LayoutViewBase *view, int cv_index, unsigned int &new_layer)
|
||||||
{
|
{
|
||||||
std::vector <std::pair <db::LayerProperties, unsigned int> > ll;
|
std::vector <std::pair <db::LayerProperties, unsigned int> > ll;
|
||||||
|
|
||||||
|
|
@ -280,7 +282,7 @@ AlignOptionsDialog::~AlignOptionsDialog ()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
AlignOptionsDialog::exec_dialog (lay::LayoutView * /*view*/, int &hmode, int &vmode, bool &visible_layers)
|
AlignOptionsDialog::exec_dialog (int &hmode, int &vmode, bool &visible_layers)
|
||||||
{
|
{
|
||||||
QRadioButton *hmode_buttons [] = { this->h_none_rb, this->h_left_rb, this->h_center_rb, this->h_right_rb };
|
QRadioButton *hmode_buttons [] = { this->h_none_rb, this->h_left_rb, this->h_center_rb, this->h_right_rb };
|
||||||
QRadioButton *vmode_buttons [] = { this->v_none_rb, this->v_top_rb, this->v_center_rb, this->v_bottom_rb };
|
QRadioButton *vmode_buttons [] = { this->v_none_rb, this->v_top_rb, this->v_center_rb, this->v_bottom_rb };
|
||||||
|
|
@ -343,7 +345,7 @@ DistributeOptionsDialog::~DistributeOptionsDialog ()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
DistributeOptionsDialog::exec_dialog (lay::LayoutView * /*view*/, bool &hdistribute, int &hmode, double &hpitch, double &hspace, bool &vdistribute, int &vmode, double &vpitch, double &vspace, bool &visible_layers)
|
DistributeOptionsDialog::exec_dialog (bool &hdistribute, int &hmode, double &hpitch, double &hspace, bool &vdistribute, int &vmode, double &vpitch, double &vspace, bool &visible_layers)
|
||||||
{
|
{
|
||||||
QRadioButton *hmode_buttons [] = { this->h_none_rb, this->h_left_rb, this->h_center_rb, this->h_right_rb };
|
QRadioButton *hmode_buttons [] = { this->h_none_rb, this->h_left_rb, this->h_center_rb, this->h_right_rb };
|
||||||
QRadioButton *vmode_buttons [] = { this->v_none_rb, this->v_top_rb, this->v_center_rb, this->v_bottom_rb };
|
QRadioButton *vmode_buttons [] = { this->v_none_rb, this->v_top_rb, this->v_center_rb, this->v_bottom_rb };
|
||||||
|
|
@ -683,3 +685,5 @@ END_PROTECTED;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
|
|
||||||
#ifndef HDR_edtDialogs
|
#ifndef HDR_edtDialogs
|
||||||
|
|
@ -45,7 +46,7 @@
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
class LayoutView;
|
class LayoutViewBase;
|
||||||
class Marker;
|
class Marker;
|
||||||
class ObjectInstPath;
|
class ObjectInstPath;
|
||||||
}
|
}
|
||||||
|
|
@ -81,7 +82,7 @@ public:
|
||||||
InstantiationForm (QWidget *parent);
|
InstantiationForm (QWidget *parent);
|
||||||
virtual ~InstantiationForm ();
|
virtual ~InstantiationForm ();
|
||||||
|
|
||||||
void show (lay::LayoutView *view, const lay::ObjectInstPath &path);
|
void show (lay::LayoutViewBase *view, const lay::ObjectInstPath &path);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void display_mode_changed (bool);
|
void display_mode_changed (bool);
|
||||||
|
|
@ -90,7 +91,7 @@ public slots:
|
||||||
private:
|
private:
|
||||||
void update ();
|
void update ();
|
||||||
|
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
const lay::ObjectInstPath *mp_path;
|
const lay::ObjectInstPath *mp_path;
|
||||||
lay::Marker *mp_marker;
|
lay::Marker *mp_marker;
|
||||||
bool m_enable_cb_callbacks;
|
bool m_enable_cb_callbacks;
|
||||||
|
|
@ -109,7 +110,7 @@ public:
|
||||||
ChangeLayerOptionsDialog (QWidget *parent);
|
ChangeLayerOptionsDialog (QWidget *parent);
|
||||||
virtual ~ChangeLayerOptionsDialog ();
|
virtual ~ChangeLayerOptionsDialog ();
|
||||||
|
|
||||||
bool exec_dialog (lay::LayoutView *view, int cv_index, unsigned int &new_layer);
|
bool exec_dialog (lay::LayoutViewBase *view, int cv_index, unsigned int &new_layer);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -125,7 +126,7 @@ public:
|
||||||
AlignOptionsDialog (QWidget *parent);
|
AlignOptionsDialog (QWidget *parent);
|
||||||
virtual ~AlignOptionsDialog ();
|
virtual ~AlignOptionsDialog ();
|
||||||
|
|
||||||
bool exec_dialog (lay::LayoutView *view, int &hmode, int &vmode, bool &visible_layers);
|
bool exec_dialog (int &hmode, int &vmode, bool &visible_layers);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -141,7 +142,7 @@ public:
|
||||||
DistributeOptionsDialog (QWidget *parent);
|
DistributeOptionsDialog (QWidget *parent);
|
||||||
virtual ~DistributeOptionsDialog ();
|
virtual ~DistributeOptionsDialog ();
|
||||||
|
|
||||||
bool exec_dialog (lay::LayoutView *view, bool &hdistribute, int &hmode, double &hpitch, double &hspace, bool &vdistribute, int &vmode, double &vpitch, double &vspace, bool &visible_layers);
|
bool exec_dialog (bool &hdistribute, int &hmode, double &hpitch, double &hspace, bool &vdistribute, int &vmode, double &vpitch, double &vspace, bool &visible_layers);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -208,3 +209,5 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "tlInternational.h"
|
#include "tlInternational.h"
|
||||||
#include "dbLibrary.h"
|
#include "dbLibrary.h"
|
||||||
|
|
@ -32,7 +33,7 @@
|
||||||
#include "edtPropertiesPageUtils.h"
|
#include "edtPropertiesPageUtils.h"
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layCellSelectionForm.h"
|
#include "layCellSelectionForm.h"
|
||||||
#include "layQtTools.h"
|
#include "layQtTools.h"
|
||||||
#include "ui_EditorOptionsGeneric.h"
|
#include "ui_EditorOptionsGeneric.h"
|
||||||
|
|
@ -69,7 +70,7 @@ static void configure_from_line_edit (lay::Dispatcher *dispatcher, QLineEdit *le
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// EditorOptionsGeneric implementation
|
// EditorOptionsGeneric implementation
|
||||||
|
|
||||||
EditorOptionsGeneric::EditorOptionsGeneric (lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
EditorOptionsGeneric::EditorOptionsGeneric (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
: EditorOptionsPage (view, dispatcher)
|
: EditorOptionsPage (view, dispatcher)
|
||||||
{
|
{
|
||||||
mp_ui = new Ui::EditorOptionsGeneric ();
|
mp_ui = new Ui::EditorOptionsGeneric ();
|
||||||
|
|
@ -206,7 +207,7 @@ EditorOptionsGeneric::setup (lay::Dispatcher *root)
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// EditorOptionsText implementation
|
// EditorOptionsText implementation
|
||||||
|
|
||||||
EditorOptionsText::EditorOptionsText (lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
EditorOptionsText::EditorOptionsText (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
: lay::EditorOptionsPage (view, dispatcher)
|
: lay::EditorOptionsPage (view, dispatcher)
|
||||||
{
|
{
|
||||||
mp_ui = new Ui::EditorOptionsText ();
|
mp_ui = new Ui::EditorOptionsText ();
|
||||||
|
|
@ -284,7 +285,7 @@ EditorOptionsText::setup (lay::Dispatcher *root)
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// EditorOptionsPath implementation
|
// EditorOptionsPath implementation
|
||||||
|
|
||||||
EditorOptionsPath::EditorOptionsPath (lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
EditorOptionsPath::EditorOptionsPath (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
: lay::EditorOptionsPage (view, dispatcher)
|
: lay::EditorOptionsPage (view, dispatcher)
|
||||||
{
|
{
|
||||||
mp_ui = new Ui::EditorOptionsPath ();
|
mp_ui = new Ui::EditorOptionsPath ();
|
||||||
|
|
@ -385,7 +386,7 @@ EditorOptionsPath::setup (lay::Dispatcher *root)
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// EditorOptionsInst implementation
|
// EditorOptionsInst implementation
|
||||||
|
|
||||||
EditorOptionsInst::EditorOptionsInst (lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
EditorOptionsInst::EditorOptionsInst (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
: lay::EditorOptionsPage (view, dispatcher)
|
: lay::EditorOptionsPage (view, dispatcher)
|
||||||
{
|
{
|
||||||
mp_ui = new Ui::EditorOptionsInst ();
|
mp_ui = new Ui::EditorOptionsInst ();
|
||||||
|
|
@ -678,7 +679,7 @@ EditorOptionsInst::setup (lay::Dispatcher *root)
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// EditorOptionsInstPCellParam implementation
|
// EditorOptionsInstPCellParam implementation
|
||||||
|
|
||||||
EditorOptionsInstPCellParam::EditorOptionsInstPCellParam (lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
EditorOptionsInstPCellParam::EditorOptionsInstPCellParam (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
: lay::EditorOptionsPage (view, dispatcher), mp_pcell_parameters (0), mp_placeholder_label (0)
|
: lay::EditorOptionsPage (view, dispatcher), mp_pcell_parameters (0), mp_placeholder_label (0)
|
||||||
{
|
{
|
||||||
mp_ui = new Ui::EditorOptionsInstPCellParam ();
|
mp_ui = new Ui::EditorOptionsInstPCellParam ();
|
||||||
|
|
@ -890,3 +891,4 @@ EditorOptionsInstPCellParam::update_pcell_parameters (const std::vector <tl::Var
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_edtEditorOptionsPages
|
#ifndef HDR_edtEditorOptionsPages
|
||||||
#define HDR_edtEditorOptionsPages
|
#define HDR_edtEditorOptionsPages
|
||||||
|
|
@ -51,7 +52,7 @@ namespace lay
|
||||||
{
|
{
|
||||||
class PluginDeclaration;
|
class PluginDeclaration;
|
||||||
class Dispatcher;
|
class Dispatcher;
|
||||||
class LayoutView;
|
class LayoutViewBase;
|
||||||
class Plugin;
|
class Plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,7 +70,7 @@ class EditorOptionsGeneric
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EditorOptionsGeneric (lay::LayoutView *view, lay::Dispatcher *dispatcher);
|
EditorOptionsGeneric (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher);
|
||||||
~EditorOptionsGeneric ();
|
~EditorOptionsGeneric ();
|
||||||
|
|
||||||
virtual std::string title () const;
|
virtual std::string title () const;
|
||||||
|
|
@ -92,7 +93,7 @@ class EditorOptionsText
|
||||||
: public lay::EditorOptionsPage
|
: public lay::EditorOptionsPage
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EditorOptionsText (lay::LayoutView *view, lay::Dispatcher *dispatcher);
|
EditorOptionsText (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher);
|
||||||
~EditorOptionsText ();
|
~EditorOptionsText ();
|
||||||
|
|
||||||
virtual std::string title () const;
|
virtual std::string title () const;
|
||||||
|
|
@ -113,7 +114,7 @@ class EditorOptionsPath
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EditorOptionsPath (lay::LayoutView *view, lay::Dispatcher *dispatcher);
|
EditorOptionsPath (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher);
|
||||||
~EditorOptionsPath ();
|
~EditorOptionsPath ();
|
||||||
|
|
||||||
virtual std::string title () const;
|
virtual std::string title () const;
|
||||||
|
|
@ -137,7 +138,7 @@ class EditorOptionsInst
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EditorOptionsInst (lay::LayoutView *view, lay::Dispatcher *root);
|
EditorOptionsInst (lay::LayoutViewBase *view, lay::Dispatcher *root);
|
||||||
~EditorOptionsInst ();
|
~EditorOptionsInst ();
|
||||||
|
|
||||||
virtual std::string title () const;
|
virtual std::string title () const;
|
||||||
|
|
@ -169,7 +170,7 @@ class EditorOptionsInstPCellParam
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EditorOptionsInstPCellParam (lay::LayoutView *view, lay::Dispatcher *root);
|
EditorOptionsInstPCellParam (lay::LayoutViewBase *view, lay::Dispatcher *root);
|
||||||
~EditorOptionsInstPCellParam ();
|
~EditorOptionsInstPCellParam ();
|
||||||
|
|
||||||
virtual std::string title () const;
|
virtual std::string title () const;
|
||||||
|
|
@ -195,3 +196,4 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
KLayout Layout Viewer
|
||||||
|
Copyright (C) 2006-2022 Matthias Koefferlein
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warredty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "edtForceLink.h"
|
||||||
|
|
||||||
|
namespace edt
|
||||||
|
{
|
||||||
|
int _force_link_f ()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
KLayout Layout Viewer
|
||||||
|
Copyright (C) 2006-2022 Matthias Koefferlein
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warredty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef HDR_edtForceLink
|
||||||
|
#define HDR_edtForceLink
|
||||||
|
|
||||||
|
#include "edtCommon.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file Include this function to force linking of the edt module
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace edt
|
||||||
|
{
|
||||||
|
EDT_PUBLIC int _force_link_f ();
|
||||||
|
static int _force_link_target = _force_link_f ();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "dbLibrary.h"
|
#include "dbLibrary.h"
|
||||||
#include "dbPCellHeader.h"
|
#include "dbPCellHeader.h"
|
||||||
|
|
@ -31,7 +32,7 @@
|
||||||
#include "edtDialogs.h"
|
#include "edtDialogs.h"
|
||||||
#include "layDialogs.h"
|
#include "layDialogs.h"
|
||||||
#include "layObjectInstPath.h"
|
#include "layObjectInstPath.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layCellSelectionForm.h"
|
#include "layCellSelectionForm.h"
|
||||||
#include "layQtTools.h"
|
#include "layQtTools.h"
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
|
|
@ -940,3 +941,4 @@ InstPropertiesPage::update_pcell_parameters ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
|
|
||||||
#ifndef HDR_edtInstPropertiesPage
|
#ifndef HDR_edtInstPropertiesPage
|
||||||
|
|
@ -88,3 +89,4 @@ protected slots:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -21,33 +21,37 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <QInputDialog>
|
|
||||||
|
|
||||||
#include "dbEdgeProcessor.h"
|
#include "dbEdgeProcessor.h"
|
||||||
#include "dbPolygonTools.h"
|
#include "dbPolygonTools.h"
|
||||||
#include "dbLibrary.h"
|
#include "dbLibrary.h"
|
||||||
#include "dbLibraryManager.h"
|
#include "dbLibraryManager.h"
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layDialogs.h"
|
|
||||||
#include "laySelector.h"
|
#include "laySelector.h"
|
||||||
#include "layCellSelectionForm.h"
|
|
||||||
#include "layFinder.h"
|
#include "layFinder.h"
|
||||||
#include "layLayerProperties.h"
|
#include "layLayerProperties.h"
|
||||||
#include "layLayerTreeModel.h"
|
|
||||||
#include "tlProgress.h"
|
#include "tlProgress.h"
|
||||||
#include "edtPlugin.h"
|
#include "edtPlugin.h"
|
||||||
#include "edtMainService.h"
|
#include "edtMainService.h"
|
||||||
#include "edtService.h"
|
#include "edtService.h"
|
||||||
#include "edtServiceImpl.h"
|
#include "edtServiceImpl.h"
|
||||||
#include "edtConfig.h"
|
#include "edtConfig.h"
|
||||||
#include "edtDialogs.h"
|
|
||||||
#include "edtEditorOptionsPages.h"
|
|
||||||
#include "edtDistribute.h"
|
#include "edtDistribute.h"
|
||||||
|
|
||||||
#include <QMessageBox>
|
#if defined(HAVE_QT)
|
||||||
#include <QFontInfo>
|
# include "layDialogs.h"
|
||||||
#include <QWidgetAction>
|
# include "layLayerTreeModel.h"
|
||||||
|
# include "layCellSelectionForm.h"
|
||||||
|
# include "edtDialogs.h"
|
||||||
|
# include "edtEditorOptionsPages.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
# include <QInputDialog>
|
||||||
|
# include <QMessageBox>
|
||||||
|
# include <QFontInfo>
|
||||||
|
# include <QWidgetAction>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace edt
|
namespace edt
|
||||||
{
|
{
|
||||||
|
|
@ -55,7 +59,7 @@ namespace edt
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Main Service implementation
|
// Main Service implementation
|
||||||
|
|
||||||
MainService::MainService (db::Manager *manager, lay::LayoutView *view, lay::Dispatcher *root)
|
MainService::MainService (db::Manager *manager, lay::LayoutViewBase *view, lay::Dispatcher *root)
|
||||||
: lay::Plugin (view),
|
: lay::Plugin (view),
|
||||||
lay::Editable (view),
|
lay::Editable (view),
|
||||||
db::Object (manager),
|
db::Object (manager),
|
||||||
|
|
@ -73,15 +77,16 @@ MainService::MainService (db::Manager *manager, lay::LayoutView *view, lay::Disp
|
||||||
m_origin_mode_x (-1), m_origin_mode_y (-1), m_origin_visible_layers_for_bbox (false),
|
m_origin_mode_x (-1), m_origin_mode_y (-1), m_origin_visible_layers_for_bbox (false),
|
||||||
m_array_a (0.0, 1.0), m_array_b (1.0, 0.0),
|
m_array_a (0.0, 1.0), m_array_b (1.0, 0.0),
|
||||||
m_array_na (1), m_array_nb (1),
|
m_array_na (1), m_array_nb (1),
|
||||||
m_router (0.0), m_rinner (0.0), m_npoints (64), m_undo_before_apply (true),
|
m_router (0.0), m_rinner (0.0), m_npoints (64), m_undo_before_apply (true)
|
||||||
mp_round_corners_dialog (0),
|
|
||||||
mp_align_options_dialog (0),
|
|
||||||
mp_distribute_options_dialog (0),
|
|
||||||
mp_flatten_inst_options_dialog (0),
|
|
||||||
mp_make_cell_options_dialog (0),
|
|
||||||
mp_make_array_options_dialog (0)
|
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
#if defined(HAVE_QT)
|
||||||
|
mp_round_corners_dialog = 0;
|
||||||
|
mp_align_options_dialog = 0;
|
||||||
|
mp_distribute_options_dialog = 0;
|
||||||
|
mp_flatten_inst_options_dialog = 0;
|
||||||
|
mp_make_cell_options_dialog = 0;
|
||||||
|
mp_make_array_options_dialog = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
MainService::~MainService ()
|
MainService::~MainService ()
|
||||||
|
|
@ -89,11 +94,13 @@ MainService::~MainService ()
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
edt::RoundCornerOptionsDialog *
|
edt::RoundCornerOptionsDialog *
|
||||||
MainService::round_corners_dialog ()
|
MainService::round_corners_dialog ()
|
||||||
{
|
{
|
||||||
if (! mp_round_corners_dialog) {
|
if (! mp_round_corners_dialog) {
|
||||||
mp_round_corners_dialog = new edt::RoundCornerOptionsDialog (view ());
|
mp_round_corners_dialog = new edt::RoundCornerOptionsDialog (view ()->widget ());
|
||||||
}
|
}
|
||||||
return mp_round_corners_dialog;
|
return mp_round_corners_dialog;
|
||||||
}
|
}
|
||||||
|
|
@ -102,7 +109,7 @@ edt::AlignOptionsDialog *
|
||||||
MainService::align_options_dialog ()
|
MainService::align_options_dialog ()
|
||||||
{
|
{
|
||||||
if (! mp_align_options_dialog) {
|
if (! mp_align_options_dialog) {
|
||||||
mp_align_options_dialog = new edt::AlignOptionsDialog (view ());
|
mp_align_options_dialog = new edt::AlignOptionsDialog (view ()->widget ());
|
||||||
}
|
}
|
||||||
return mp_align_options_dialog;
|
return mp_align_options_dialog;
|
||||||
}
|
}
|
||||||
|
|
@ -111,7 +118,7 @@ edt::DistributeOptionsDialog *
|
||||||
MainService::distribute_options_dialog ()
|
MainService::distribute_options_dialog ()
|
||||||
{
|
{
|
||||||
if (! mp_distribute_options_dialog) {
|
if (! mp_distribute_options_dialog) {
|
||||||
mp_distribute_options_dialog = new edt::DistributeOptionsDialog (view ());
|
mp_distribute_options_dialog = new edt::DistributeOptionsDialog (view ()->widget ());
|
||||||
}
|
}
|
||||||
return mp_distribute_options_dialog;
|
return mp_distribute_options_dialog;
|
||||||
}
|
}
|
||||||
|
|
@ -120,7 +127,7 @@ lay::FlattenInstOptionsDialog *
|
||||||
MainService::flatten_inst_options_dialog ()
|
MainService::flatten_inst_options_dialog ()
|
||||||
{
|
{
|
||||||
if (! mp_flatten_inst_options_dialog) {
|
if (! mp_flatten_inst_options_dialog) {
|
||||||
mp_flatten_inst_options_dialog = new lay::FlattenInstOptionsDialog (view (), false /*don't allow pruning*/);
|
mp_flatten_inst_options_dialog = new lay::FlattenInstOptionsDialog (view ()->widget (), false /*don't allow pruning*/);
|
||||||
}
|
}
|
||||||
return mp_flatten_inst_options_dialog;
|
return mp_flatten_inst_options_dialog;
|
||||||
}
|
}
|
||||||
|
|
@ -129,7 +136,7 @@ edt::MakeCellOptionsDialog *
|
||||||
MainService::make_cell_options_dialog ()
|
MainService::make_cell_options_dialog ()
|
||||||
{
|
{
|
||||||
if (! mp_make_cell_options_dialog) {
|
if (! mp_make_cell_options_dialog) {
|
||||||
mp_make_cell_options_dialog = new edt::MakeCellOptionsDialog (view ());
|
mp_make_cell_options_dialog = new edt::MakeCellOptionsDialog (view ()->widget ());
|
||||||
}
|
}
|
||||||
return mp_make_cell_options_dialog;
|
return mp_make_cell_options_dialog;
|
||||||
}
|
}
|
||||||
|
|
@ -138,11 +145,13 @@ edt::MakeArrayOptionsDialog *
|
||||||
MainService::make_array_options_dialog ()
|
MainService::make_array_options_dialog ()
|
||||||
{
|
{
|
||||||
if (! mp_make_array_options_dialog) {
|
if (! mp_make_array_options_dialog) {
|
||||||
mp_make_array_options_dialog = new edt::MakeArrayOptionsDialog (view ());
|
mp_make_array_options_dialog = new edt::MakeArrayOptionsDialog (view ()->widget ());
|
||||||
}
|
}
|
||||||
return mp_make_array_options_dialog;
|
return mp_make_array_options_dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
MainService::menu_activated (const std::string &symbol)
|
MainService::menu_activated (const std::string &symbol)
|
||||||
{
|
{
|
||||||
|
|
@ -298,10 +307,10 @@ MainService::cm_descend ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! common_inst.anything ()) {
|
if (! common_inst.anything ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Select an object to determine into which instance to descend")));
|
throw tl::Exception (tl::to_string (tr ("Select an object to determine into which instance to descend")));
|
||||||
}
|
}
|
||||||
if (! common_inst.valid () || common_inst.ambiguous ()) {
|
if (! common_inst.valid () || common_inst.ambiguous ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection is ambiguous - cannot determine into which instance to descend")));
|
throw tl::Exception (tl::to_string (tr ("Selection is ambiguous - cannot determine into which instance to descend")));
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove the common path and create a new set of selections
|
// remove the common path and create a new set of selections
|
||||||
|
|
@ -388,14 +397,23 @@ MainService::cm_ascend ()
|
||||||
void
|
void
|
||||||
MainService::cm_flatten_insts ()
|
MainService::cm_flatten_insts ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
tl_assert (view ()->is_editable ());
|
tl_assert (view ()->is_editable ());
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
if (flatten_inst_options_dialog ()->exec_dialog (m_flatten_insts_levels, m_flatten_prune) && m_flatten_insts_levels != 0) {
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: make parameters persistent so we can set them externally
|
||||||
|
if (! (flatten_inst_options_dialog ()->exec_dialog (m_flatten_insts_levels, m_flatten_prune) && m_flatten_insts_levels != 0)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Flatten instances")));
|
manager ()->transaction (tl::to_string (tr ("Flatten instances")));
|
||||||
|
|
||||||
std::set<db::Layout *> needs_cleanup;
|
std::set<db::Layout *> needs_cleanup;
|
||||||
|
|
||||||
|
|
@ -439,8 +457,6 @@ MainService::cm_flatten_insts ()
|
||||||
view ()->clear_selection ();
|
view ()->clear_selection ();
|
||||||
|
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -449,7 +465,7 @@ MainService::cm_move_hier_up ()
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Move up in hierarchy")));
|
manager ()->transaction (tl::to_string (tr ("Move up in hierarchy")));
|
||||||
|
|
||||||
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
@ -691,7 +707,7 @@ MainService::cm_make_cell_variants ()
|
||||||
if (cv_index < 0) {
|
if (cv_index < 0) {
|
||||||
cv_index = r->cv_index ();
|
cv_index = r->cv_index ();
|
||||||
} else if (cv_index != int (r->cv_index ())) {
|
} else if (cv_index != int (r->cv_index ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The selection must not contain objects from different layouts for 'make cell variants'")));
|
throw tl::Exception (tl::to_string (tr ("The selection must not contain objects from different layouts for 'make cell variants'")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -705,7 +721,7 @@ MainService::cm_make_cell_variants ()
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Make cell variants for selection")));
|
manager ()->transaction (tl::to_string (tr ("Make cell variants for selection")));
|
||||||
|
|
||||||
std::vector<lay::ObjectInstPath> new_selection;
|
std::vector<lay::ObjectInstPath> new_selection;
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
@ -716,7 +732,7 @@ MainService::cm_make_cell_variants ()
|
||||||
|
|
||||||
// TODO: the algorithm is basically O(2) in the number of selected items. A first
|
// TODO: the algorithm is basically O(2) in the number of selected items. A first
|
||||||
// step to mitigate that problem is to provide a progress and hence a way to cancel it.
|
// step to mitigate that problem is to provide a progress and hence a way to cancel it.
|
||||||
tl::RelativeProgress progress (tl::to_string (QObject::tr ("Make cell variants for selection")), num_sel, 1);
|
tl::RelativeProgress progress (tl::to_string (tr ("Make cell variants for selection")), num_sel, 1);
|
||||||
|
|
||||||
for (size_t nsel = 0; nsel < num_sel; ++nsel) {
|
for (size_t nsel = 0; nsel < num_sel; ++nsel) {
|
||||||
|
|
||||||
|
|
@ -901,7 +917,7 @@ MainService::cm_resolve_arefs ()
|
||||||
cv_index = r->cv_index ();
|
cv_index = r->cv_index ();
|
||||||
} else if (cv_index != int (r->cv_index ())) {
|
} else if (cv_index != int (r->cv_index ())) {
|
||||||
// TODO: this limitation is not really necessary, but makes the code somewhat simpler
|
// TODO: this limitation is not really necessary, but makes the code somewhat simpler
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The selection must not contain objects from different layouts for 'resolve array references'")));
|
throw tl::Exception (tl::to_string (tr ("The selection must not contain objects from different layouts for 'resolve array references'")));
|
||||||
}
|
}
|
||||||
insts_to_resolve.push_back (*r);
|
insts_to_resolve.push_back (*r);
|
||||||
}
|
}
|
||||||
|
|
@ -917,7 +933,7 @@ MainService::cm_resolve_arefs ()
|
||||||
|
|
||||||
std::vector<lay::ObjectInstPath> new_selection;
|
std::vector<lay::ObjectInstPath> new_selection;
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Resolve array references")));
|
manager ()->transaction (tl::to_string (tr ("Resolve array references")));
|
||||||
|
|
||||||
for (std::vector<lay::ObjectInstPath>::const_iterator p = insts_to_resolve.begin (); p != insts_to_resolve.end (); ++p) {
|
for (std::vector<lay::ObjectInstPath>::const_iterator p = insts_to_resolve.begin (); p != insts_to_resolve.end (); ++p) {
|
||||||
|
|
||||||
|
|
@ -962,6 +978,10 @@ MainService::cm_resolve_arefs ()
|
||||||
void
|
void
|
||||||
MainService::cm_make_cell ()
|
MainService::cm_make_cell ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
tl_assert (view ()->is_editable ());
|
tl_assert (view ()->is_editable ());
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
|
|
@ -972,7 +992,7 @@ MainService::cm_make_cell ()
|
||||||
if (cv_index < 0) {
|
if (cv_index < 0) {
|
||||||
cv_index = r->cv_index ();
|
cv_index = r->cv_index ();
|
||||||
} else if (cv_index != int (r->cv_index ())) {
|
} else if (cv_index != int (r->cv_index ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The selection must not contain objects from different layouts for 'make cell'")));
|
throw tl::Exception (tl::to_string (tr ("The selection must not contain objects from different layouts for 'make cell'")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -981,7 +1001,12 @@ MainService::cm_make_cell ()
|
||||||
|
|
||||||
const lay::CellView &cv = view ()->cellview (cv_index);
|
const lay::CellView &cv = view ()->cellview (cv_index);
|
||||||
|
|
||||||
if (make_cell_options_dialog ()->exec_dialog (cv->layout (), m_make_cell_name, m_origin_mode_x, m_origin_mode_y)) {
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: make parameters persistent so we can set them externally
|
||||||
|
if (! make_cell_options_dialog ()->exec_dialog (cv->layout (), m_make_cell_name, m_origin_mode_x, m_origin_mode_y)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Compute the selection's bbox to establish a good origin for the new cell
|
// Compute the selection's bbox to establish a good origin for the new cell
|
||||||
db::Box selection_bbox;
|
db::Box selection_bbox;
|
||||||
|
|
@ -997,12 +1022,12 @@ MainService::cm_make_cell ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selection_bbox.empty ()) {
|
if (selection_bbox.empty ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The selection is empty. Cannot create a cell from an empty selection.")));
|
throw tl::Exception (tl::to_string (tr ("The selection is empty. Cannot create a cell from an empty selection.")));
|
||||||
}
|
}
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Make cell from selection")));
|
manager ()->transaction (tl::to_string (tr ("Make cell from selection")));
|
||||||
|
|
||||||
db::cell_index_type target_ci = cv->layout ().add_cell (m_make_cell_name.c_str ());
|
db::cell_index_type target_ci = cv->layout ().add_cell (m_make_cell_name.c_str ());
|
||||||
// create target cell
|
// create target cell
|
||||||
|
|
@ -1055,8 +1080,6 @@ MainService::cm_make_cell ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1069,7 +1092,7 @@ MainService::cm_convert_to_cell ()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Convert to static cell")));
|
manager ()->transaction (tl::to_string (tr ("Convert to static cell")));
|
||||||
|
|
||||||
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
||||||
|
|
||||||
|
|
@ -1110,7 +1133,7 @@ MainService::cm_convert_to_cell ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needs_cleanup.empty ()) {
|
if (needs_cleanup.empty ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("No instance of a PCell or library cell selected - nothing to convert")));
|
throw tl::Exception (tl::to_string (tr ("No instance of a PCell or library cell selected - nothing to convert")));
|
||||||
}
|
}
|
||||||
|
|
||||||
// clean up the layouts that need to do so.
|
// clean up the layouts that need to do so.
|
||||||
|
|
@ -1132,6 +1155,10 @@ MainService::cm_convert_to_cell ()
|
||||||
void
|
void
|
||||||
MainService::cm_convert_to_pcell ()
|
MainService::cm_convert_to_pcell ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
tl_assert (view ()->is_editable ());
|
tl_assert (view ()->is_editable ());
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
|
|
@ -1143,13 +1170,13 @@ MainService::cm_convert_to_pcell ()
|
||||||
num_selected += (*es)->selection ().size ();
|
num_selected += (*es)->selection ().size ();
|
||||||
for (edt::Service::obj_iterator s = (*es)->selection ().begin (); s != (*es)->selection ().end (); ++s) {
|
for (edt::Service::obj_iterator s = (*es)->selection ().begin (); s != (*es)->selection ().end (); ++s) {
|
||||||
if (s->is_cell_inst ()) {
|
if (s->is_cell_inst ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection contains instances - they cannot be converted to PCells.")));
|
throw tl::Exception (tl::to_string (tr ("Selection contains instances - they cannot be converted to PCells.")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collected items
|
// Collected items
|
||||||
QStringList items;
|
std::vector<std::string> pcell_items;
|
||||||
|
|
||||||
// Collect the libraries and PCells within these libraries that are candidates here
|
// Collect the libraries and PCells within these libraries that are candidates here
|
||||||
std::vector<std::pair<db::Library *, db::pcell_id_type> > pcells;
|
std::vector<std::pair<db::Library *, db::pcell_id_type> > pcells;
|
||||||
|
|
@ -1176,7 +1203,7 @@ MainService::cm_convert_to_pcell ()
|
||||||
// We have positive hit
|
// We have positive hit
|
||||||
if (pc_decl) {
|
if (pc_decl) {
|
||||||
pcells.push_back (std::make_pair (lib, pc->second));
|
pcells.push_back (std::make_pair (lib, pc->second));
|
||||||
items.push_back (tl::to_qstring (lib->get_name () + "." + pc_decl->name ()));
|
pcell_items.push_back (lib->get_name () + "." + pc_decl->name ());
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
|
@ -1187,18 +1214,33 @@ MainService::cm_convert_to_pcell ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pcell_items.empty ()) {
|
||||||
|
throw tl::Exception (tl::to_string (tr ("No PCell found that accepts the selected shapes for conversion.")));
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: In Qt-less case keep selection persistent so we can set it externally
|
||||||
|
QStringList items;
|
||||||
|
for (auto i = pcell_items.begin (); i != pcell_items.end (); ++i) {
|
||||||
|
items.push_back (tl::to_qstring (*i));
|
||||||
|
}
|
||||||
|
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
QString item = QInputDialog::getItem (view (), QObject::tr ("Select Target PCell"),
|
QString item = QInputDialog::getItem (view ()->widget (),
|
||||||
QObject::tr ("Select the PCell the shape should be converted into"),
|
tr ("Select Target PCell"),
|
||||||
|
tr ("Select the PCell the shape should be converted into"),
|
||||||
items, 0, false, &ok);
|
items, 0, false, &ok);
|
||||||
if (! ok) {
|
if (! ok) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = items.indexOf (item);
|
index = items.indexOf (item);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
db::Library *lib = pcells [index].first;
|
db::Library *lib = pcells [index].first;
|
||||||
db::pcell_id_type pcid = pcells [index].second;
|
db::pcell_id_type pcid = pcells [index].second;
|
||||||
|
|
@ -1209,7 +1251,7 @@ MainService::cm_convert_to_pcell ()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Convert to PCell")));
|
manager ()->transaction (tl::to_string (tr ("Convert to PCell")));
|
||||||
|
|
||||||
std::vector<edt::Service::obj_iterator> to_delete;
|
std::vector<edt::Service::obj_iterator> to_delete;
|
||||||
std::vector<lay::ObjectInstPath> new_selection;
|
std::vector<lay::ObjectInstPath> new_selection;
|
||||||
|
|
@ -1218,7 +1260,7 @@ MainService::cm_convert_to_pcell ()
|
||||||
bool any_converted = false;
|
bool any_converted = false;
|
||||||
|
|
||||||
{
|
{
|
||||||
tl::RelativeProgress progress (tl::to_string (QObject::tr ("Convert to PCell")), num_selected, 1000);
|
tl::RelativeProgress progress (tl::to_string (tr ("Convert to PCell")), num_selected, 1000);
|
||||||
|
|
||||||
// convert the shapes which can be converted
|
// convert the shapes which can be converted
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
@ -1266,7 +1308,7 @@ MainService::cm_convert_to_pcell ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! any_converted) {
|
if (! any_converted) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("None of the shapes could be converted to the desired PCell")));
|
throw tl::Exception (tl::to_string (tr ("None of the shapes could be converted to the desired PCell")));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete the shapes which have been converted
|
// Delete the shapes which have been converted
|
||||||
|
|
@ -1289,7 +1331,10 @@ MainService::cm_convert_to_pcell ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (any_non_converted) {
|
if (any_non_converted) {
|
||||||
QMessageBox::warning (view (), QObject::tr ("Warning"), QObject::tr ("Some of the shapes could not be converted to the desired PCell"));
|
tl::warn << tl::to_string (tr ("Some of the shapes could not be converted to the desired PCell"));
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
QMessageBox::warning (view ()->widget (), tr ("Warning"), tr ("Some of the shapes could not be converted to the desired PCell"));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
|
|
@ -1343,6 +1388,10 @@ static bool extract_rad (std::vector <db::Polygon> &poly, double &rinner, double
|
||||||
void
|
void
|
||||||
MainService::cm_round_corners ()
|
MainService::cm_round_corners ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
tl_assert (view ()->is_editable ());
|
tl_assert (view ()->is_editable ());
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
|
|
@ -1360,12 +1409,12 @@ MainService::cm_round_corners ()
|
||||||
if (! s->is_cell_inst () && (s->shape ().is_polygon () || s->shape ().is_path () || s->shape ().is_box ())) {
|
if (! s->is_cell_inst () && (s->shape ().is_polygon () || s->shape ().is_path () || s->shape ().is_box ())) {
|
||||||
|
|
||||||
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection originates from different layouts - cannot compute result in this case.")));
|
throw tl::Exception (tl::to_string (tr ("Selection originates from different layouts - cannot compute result in this case.")));
|
||||||
}
|
}
|
||||||
cv_index = int (s->cv_index ());
|
cv_index = int (s->cv_index ());
|
||||||
|
|
||||||
if (layer_index >= 0 && layer_index != int (s->layer ())) {
|
if (layer_index >= 0 && layer_index != int (s->layer ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection originates from different layers - cannot compute result in this case.")));
|
throw tl::Exception (tl::to_string (tr ("Selection originates from different layers - cannot compute result in this case.")));
|
||||||
}
|
}
|
||||||
layer_index = int (s->layer ());
|
layer_index = int (s->layer ());
|
||||||
|
|
||||||
|
|
@ -1379,7 +1428,7 @@ MainService::cm_round_corners ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cv_index < 0 || layer_index < 0) {
|
if (cv_index < 0 || layer_index < 0) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection does not contain polygons")));
|
throw tl::Exception (tl::to_string (tr ("Selection does not contain polygons")));
|
||||||
}
|
}
|
||||||
|
|
||||||
// prepare: merge to remove cutlines and smooth to remove effects of cutlines
|
// prepare: merge to remove cutlines and smooth to remove effects of cutlines
|
||||||
|
|
@ -1402,9 +1451,12 @@ MainService::cm_round_corners ()
|
||||||
rinner *= dbu;
|
rinner *= dbu;
|
||||||
router *= dbu;
|
router *= dbu;
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: make parameters persistent so we can set them externally
|
||||||
if (! round_corners_dialog ()->exec_dialog (cv->layout (), m_router, m_rinner, m_npoints, m_undo_before_apply, router, rinner, n, has_extracted)) {
|
if (! round_corners_dialog ()->exec_dialog (cv->layout (), m_router, m_rinner, m_npoints, m_undo_before_apply, router, rinner, n, has_extracted)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (! m_undo_before_apply || ! has_extracted) {
|
if (! m_undo_before_apply || ! has_extracted) {
|
||||||
out.swap (in);
|
out.swap (in);
|
||||||
|
|
@ -1419,7 +1471,7 @@ MainService::cm_round_corners ()
|
||||||
ep.merge (out, primary, 0 /*min_wc*/, true /*resolve holes*/, true /*min coherence*/);
|
ep.merge (out, primary, 0 /*min_wc*/, true /*resolve holes*/, true /*min coherence*/);
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Corner rounding operation on selection")));
|
manager ()->transaction (tl::to_string (tr ("Corner rounding operation on selection")));
|
||||||
|
|
||||||
// Delete the current selection
|
// Delete the current selection
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
@ -1465,6 +1517,10 @@ MainService::cm_round_corners ()
|
||||||
void
|
void
|
||||||
MainService::cm_size ()
|
MainService::cm_size ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
tl_assert (view ()->is_editable ());
|
tl_assert (view ()->is_editable ());
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
|
|
@ -1482,12 +1538,12 @@ MainService::cm_size ()
|
||||||
if (! s->is_cell_inst () && (s->shape ().is_polygon () || s->shape ().is_path () || s->shape ().is_box ())) {
|
if (! s->is_cell_inst () && (s->shape ().is_polygon () || s->shape ().is_path () || s->shape ().is_box ())) {
|
||||||
|
|
||||||
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection originates from different layouts - cannot compute result in this case.")));
|
throw tl::Exception (tl::to_string (tr ("Selection originates from different layouts - cannot compute result in this case.")));
|
||||||
}
|
}
|
||||||
cv_index = int (s->cv_index ());
|
cv_index = int (s->cv_index ());
|
||||||
|
|
||||||
if (layer_index >= 0 && layer_index != int (s->layer ())) {
|
if (layer_index >= 0 && layer_index != int (s->layer ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection originates from different layers - cannot compute result in this case.")));
|
throw tl::Exception (tl::to_string (tr ("Selection originates from different layers - cannot compute result in this case.")));
|
||||||
}
|
}
|
||||||
layer_index = int (s->layer ());
|
layer_index = int (s->layer ());
|
||||||
|
|
||||||
|
|
@ -1501,13 +1557,17 @@ MainService::cm_size ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cv_index < 0 || layer_index < 0) {
|
if (cv_index < 0 || layer_index < 0) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection does not contain polygons")));
|
throw tl::Exception (tl::to_string (tr ("Selection does not contain polygons")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string sl ("0.0");
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: keep the value persistent so we can set it externally in the Qt-less case
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
QString s = QInputDialog::getText (view (),
|
QString s = QInputDialog::getText (view ()->widget (),
|
||||||
QObject::tr ("Sizing"),
|
tr ("Sizing"),
|
||||||
QObject::tr ("Sizing (in micron, positive or negative). Two values (dx, dy) for anisotropic sizing."),
|
tr ("Sizing (in micron, positive or negative). Two values (dx, dy) for anisotropic sizing."),
|
||||||
QLineEdit::Normal, QString::fromUtf8 ("0.0"),
|
QLineEdit::Normal, QString::fromUtf8 ("0.0"),
|
||||||
&ok);
|
&ok);
|
||||||
|
|
||||||
|
|
@ -1515,8 +1575,10 @@ MainService::cm_size ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sl = tl::to_string (s);
|
||||||
|
#endif
|
||||||
|
|
||||||
double dx = 0.0, dy = 0.0;
|
double dx = 0.0, dy = 0.0;
|
||||||
std::string sl (tl::to_string (s));
|
|
||||||
tl::Extractor ex (sl.c_str ());
|
tl::Extractor ex (sl.c_str ());
|
||||||
ex.read (dx);
|
ex.read (dx);
|
||||||
if (ex.test (",")) {
|
if (ex.test (",")) {
|
||||||
|
|
@ -1535,7 +1597,7 @@ MainService::cm_size ()
|
||||||
ep.size (primary, idx, idy, out, 2 /*mode, TODO: make variable*/, true /*resolve holes*/, true /*min coherence*/);
|
ep.size (primary, idx, idy, out, 2 /*mode, TODO: make variable*/, true /*resolve holes*/, true /*min coherence*/);
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Sizing operation on selection")));
|
manager ()->transaction (tl::to_string (tr ("Sizing operation on selection")));
|
||||||
|
|
||||||
// Delete the current selection
|
// Delete the current selection
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
@ -1598,12 +1660,12 @@ MainService::boolean_op (int mode)
|
||||||
if (s->seq () == 0 && ! s->is_cell_inst () && (s->shape ().is_polygon () || s->shape ().is_path () || s->shape ().is_box ())) {
|
if (s->seq () == 0 && ! s->is_cell_inst () && (s->shape ().is_polygon () || s->shape ().is_path () || s->shape ().is_box ())) {
|
||||||
|
|
||||||
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Primary selection originates from different layouts - cannot compute result in this case.")));
|
throw tl::Exception (tl::to_string (tr ("Primary selection originates from different layouts - cannot compute result in this case.")));
|
||||||
}
|
}
|
||||||
cv_index = int (s->cv_index ());
|
cv_index = int (s->cv_index ());
|
||||||
|
|
||||||
if (layer_index >= 0 && layer_index != int (s->layer ())) {
|
if (layer_index >= 0 && layer_index != int (s->layer ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Primary selection originates from different layers - cannot compute result in this case.")));
|
throw tl::Exception (tl::to_string (tr ("Primary selection originates from different layers - cannot compute result in this case.")));
|
||||||
}
|
}
|
||||||
layer_index = int (s->layer ());
|
layer_index = int (s->layer ());
|
||||||
|
|
||||||
|
|
@ -1617,7 +1679,7 @@ MainService::boolean_op (int mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cv_index < 0 || layer_index < 0) {
|
if (cv_index < 0 || layer_index < 0) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Primary selection does not contain polygons")));
|
throw tl::Exception (tl::to_string (tr ("Primary selection does not contain polygons")));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<db::Polygon> secondary;
|
std::vector<db::Polygon> secondary;
|
||||||
|
|
@ -1655,7 +1717,7 @@ MainService::boolean_op (int mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Boolean operation on selection")));
|
manager ()->transaction (tl::to_string (tr ("Boolean operation on selection")));
|
||||||
|
|
||||||
// Delete the current selection
|
// Delete the current selection
|
||||||
// NOTE: we delete only those shapes from the primary layer and keep shapes from other layers.
|
// NOTE: we delete only those shapes from the primary layer and keep shapes from other layers.
|
||||||
|
|
@ -1750,7 +1812,7 @@ db::DVector compute_alignment_vector (const db::DBox &prim_box, const db::DBox &
|
||||||
}
|
}
|
||||||
|
|
||||||
static db::DBox
|
static db::DBox
|
||||||
inst_bbox (const db::CplxTrans &tr, lay::LayoutView *view, int cv_index, const db::InstElement &inst_element, bool visible_only)
|
inst_bbox (const db::CplxTrans &tr, lay::LayoutViewBase *view, int cv_index, const db::InstElement &inst_element, bool visible_only)
|
||||||
{
|
{
|
||||||
db::DBox box;
|
db::DBox box;
|
||||||
|
|
||||||
|
|
@ -1774,14 +1836,21 @@ inst_bbox (const db::CplxTrans &tr, lay::LayoutView *view, int cv_index, const d
|
||||||
void
|
void
|
||||||
MainService::cm_align ()
|
MainService::cm_align ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
tl_assert (view ()->is_editable ());
|
tl_assert (view ()->is_editable ());
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
||||||
|
|
||||||
if (! align_options_dialog ()->exec_dialog (view (), m_align_hmode, m_align_vmode, m_align_visible_layers)) {
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: make parameters persistent so we can set them externally
|
||||||
|
if (! align_options_dialog ()->exec_dialog (m_align_hmode, m_align_vmode, m_align_visible_layers)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
db::DBox prim_box;
|
db::DBox prim_box;
|
||||||
bool has_secondary = false;
|
bool has_secondary = false;
|
||||||
|
|
@ -1811,7 +1880,7 @@ MainService::cm_align ()
|
||||||
if (! prim_box.empty ()) {
|
if (! prim_box.empty ()) {
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Alignment")));
|
manager ()->transaction (tl::to_string (tr ("Alignment")));
|
||||||
|
|
||||||
// do the alignment
|
// do the alignment
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
@ -1860,16 +1929,23 @@ MainService::cm_align ()
|
||||||
void
|
void
|
||||||
MainService::cm_distribute ()
|
MainService::cm_distribute ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
tl_assert (view ()->is_editable ());
|
tl_assert (view ()->is_editable ());
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view ()->get_plugins <edt::Service> ();
|
||||||
|
|
||||||
if (! distribute_options_dialog ()->exec_dialog (view (), m_hdistribute, m_distribute_hmode, m_distribute_hpitch, m_distribute_hspace,
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: make parameters persistent so we can set them externally
|
||||||
|
if (! distribute_options_dialog ()->exec_dialog (m_hdistribute, m_distribute_hmode, m_distribute_hpitch, m_distribute_hspace,
|
||||||
m_vdistribute, m_distribute_vmode, m_distribute_vpitch, m_distribute_vspace,
|
m_vdistribute, m_distribute_vmode, m_distribute_vpitch, m_distribute_vspace,
|
||||||
m_distribute_visible_layers)) {
|
m_distribute_visible_layers)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (! m_hdistribute && ! m_vdistribute) {
|
if (! m_hdistribute && ! m_vdistribute) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -1945,7 +2021,7 @@ MainService::cm_distribute ()
|
||||||
|
|
||||||
{
|
{
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Distribution")));
|
manager ()->transaction (tl::to_string (tr ("Distribution")));
|
||||||
|
|
||||||
// do the distribution
|
// do the distribution
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
@ -1968,6 +2044,10 @@ MainService::cm_distribute ()
|
||||||
void
|
void
|
||||||
MainService::cm_make_array ()
|
MainService::cm_make_array ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
check_no_guiding_shapes ();
|
check_no_guiding_shapes ();
|
||||||
|
|
||||||
|
|
@ -1980,10 +2060,15 @@ MainService::cm_make_array ()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Nothing selected to make arrays of")));
|
throw tl::Exception (tl::to_string (tr ("Nothing selected to make arrays of")));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (make_array_options_dialog ()->exec_dialog (m_array_a, m_array_na, m_array_b, m_array_nb)) {
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: make parameters persistent so we can set them externally
|
||||||
|
if (! make_array_options_dialog ()->exec_dialog (m_array_a, m_array_na, m_array_b, m_array_nb)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
|
|
||||||
|
|
@ -1994,10 +2079,10 @@ MainService::cm_make_array ()
|
||||||
if (! has_undo) {
|
if (! has_undo) {
|
||||||
manager ()->clear ();
|
manager ()->clear ();
|
||||||
} else {
|
} else {
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Make array")));
|
manager ()->transaction (tl::to_string (tr ("Make array")));
|
||||||
}
|
}
|
||||||
|
|
||||||
tl::RelativeProgress progress (tl::to_string (QObject::tr ("Make array")), (size_t (m_array_na) * size_t (m_array_nb) - 1) * n, 1000);
|
tl::RelativeProgress progress (tl::to_string (tr ("Make array")), (size_t (m_array_na) * size_t (m_array_nb) - 1) * n, 1000);
|
||||||
|
|
||||||
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
for (std::vector<edt::Service *>::const_iterator es = edt_services.begin (); es != edt_services.end (); ++es) {
|
||||||
|
|
||||||
|
|
@ -2064,13 +2149,15 @@ MainService::cm_make_array ()
|
||||||
if (has_undo) {
|
if (has_undo) {
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MainService::cm_tap ()
|
MainService::cm_tap ()
|
||||||
{
|
{
|
||||||
|
#if ! defined(HAVE_QT)
|
||||||
|
tl_assert (false); // see TODO
|
||||||
|
#endif
|
||||||
|
|
||||||
if (! view ()->view_object_widget ()->mouse_in_window ()) {
|
if (! view ()->view_object_widget ()->mouse_in_window ()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2107,12 +2194,15 @@ MainService::cm_tap ()
|
||||||
|
|
||||||
// List the layers under the cursor as pop up a menu
|
// List the layers under the cursor as pop up a menu
|
||||||
|
|
||||||
std::unique_ptr<QMenu> menu (new QMenu (view ()));
|
#if defined(HAVE_QT)
|
||||||
|
// TODO: what to do here in Qt-less case? Store results in configuration so they can be retrieved externally?
|
||||||
|
std::unique_ptr<QMenu> menu (new QMenu (view ()->widget ()));
|
||||||
menu->show ();
|
menu->show ();
|
||||||
|
|
||||||
int icon_size = menu->style ()->pixelMetric (QStyle::PM_ButtonIconSize);
|
int icon_size = menu->style ()->pixelMetric (QStyle::PM_ButtonIconSize);
|
||||||
|
|
||||||
QPoint mp = view ()->view_object_widget ()->mapToGlobal (view ()->view_object_widget ()->mouse_position ());
|
db::DPoint mp_local = view ()->view_object_widget ()->mouse_position ();
|
||||||
|
QPoint mp = view ()->view_object_widget ()->mapToGlobal (QPoint (mp_local.x (), mp_local.y ()));
|
||||||
|
|
||||||
for (std::vector<lay::LayerPropertiesConstIterator>::const_iterator l = tapped_layers.begin (); l != tapped_layers.end (); ++l) {
|
for (std::vector<lay::LayerPropertiesConstIterator>::const_iterator l = tapped_layers.begin (); l != tapped_layers.end (); ++l) {
|
||||||
QAction *a = menu->addAction (lay::LayerTreeModel::icon_for_layer (*l, view (), icon_size, icon_size, 0, true), tl::to_qstring ((*l)->display_string (view (), true, true /*with source*/)));
|
QAction *a = menu->addAction (lay::LayerTreeModel::icon_for_layer (*l, view (), icon_size, icon_size, 0, true), tl::to_qstring ((*l)->display_string (view (), true, true /*with source*/)));
|
||||||
|
|
@ -2132,6 +2222,7 @@ MainService::cm_tap ()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -2145,7 +2236,7 @@ MainService::cm_change_layer ()
|
||||||
// get (common) cellview index of the selected shapes
|
// get (common) cellview index of the selected shapes
|
||||||
for (SelectionIterator s (view ()); ! s.at_end (); ++s) {
|
for (SelectionIterator s (view ()); ! s.at_end (); ++s) {
|
||||||
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
if (cv_index >= 0 && cv_index != int (s->cv_index ())) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Selections originate from different layouts - cannot switch layer in this case.")));
|
throw tl::Exception (tl::to_string (tr ("Selections originate from different layouts - cannot switch layer in this case.")));
|
||||||
}
|
}
|
||||||
cv_index = int (s->cv_index ());
|
cv_index = int (s->cv_index ());
|
||||||
}
|
}
|
||||||
|
|
@ -2157,24 +2248,24 @@ MainService::cm_change_layer ()
|
||||||
|
|
||||||
lay::LayerPropertiesConstIterator cl = view ()->current_layer ();
|
lay::LayerPropertiesConstIterator cl = view ()->current_layer ();
|
||||||
if (cl.is_null ()) {
|
if (cl.is_null ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Please select a layer first")).c_str ());
|
throw tl::Exception (tl::to_string (tr ("Please select a layer first")).c_str ());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cv_index != cl->cellview_index ()) {
|
if (cv_index != cl->cellview_index ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Shapes cannot be moved to a different layout")).c_str ());
|
throw tl::Exception (tl::to_string (tr ("Shapes cannot be moved to a different layout")).c_str ());
|
||||||
}
|
}
|
||||||
|
|
||||||
const lay::CellView &cv = view ()->cellview (cv_index);
|
const lay::CellView &cv = view ()->cellview (cv_index);
|
||||||
int layer = cl->layer_index ();
|
int layer = cl->layer_index ();
|
||||||
|
|
||||||
if (! cv.is_valid ()) {
|
if (! cv.is_valid ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Please select a cell first")).c_str ());
|
throw tl::Exception (tl::to_string (tr ("Please select a cell first")).c_str ());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layer < 0 || ! cv->layout ().is_valid_layer ((unsigned int) layer)) {
|
if (layer < 0 || ! cv->layout ().is_valid_layer ((unsigned int) layer)) {
|
||||||
|
|
||||||
if (cl->has_children ()) {
|
if (cl->has_children ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Please select a valid drawing layer first")).c_str ());
|
throw tl::Exception (tl::to_string (tr ("Please select a valid drawing layer first")).c_str ());
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// create this layer now
|
// create this layer now
|
||||||
|
|
@ -2203,7 +2294,7 @@ MainService::cm_change_layer ()
|
||||||
|
|
||||||
view ()->cancel_edits ();
|
view ()->cancel_edits ();
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Change layer")));
|
manager ()->transaction (tl::to_string (tr ("Change layer")));
|
||||||
|
|
||||||
db::Layout &layout = view ()->cellview (cv_index)->layout ();
|
db::Layout &layout = view ()->cellview (cv_index)->layout ();
|
||||||
|
|
||||||
|
|
@ -2264,7 +2355,7 @@ MainService::cm_change_layer ()
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Nothing selected to switch layers for")));
|
throw tl::Exception (tl::to_string (tr ("Nothing selected to switch layers for")));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -2277,7 +2368,7 @@ MainService::check_no_guiding_shapes ()
|
||||||
for (edt::Service::obj_iterator s = (*es)->selection ().begin (); s != (*es)->selection ().end (); ++s) {
|
for (edt::Service::obj_iterator s = (*es)->selection ().begin (); s != (*es)->selection ().end (); ++s) {
|
||||||
if (! s->is_cell_inst ()) {
|
if (! s->is_cell_inst ()) {
|
||||||
if (s->layer () == view ()->cellview (s->cv_index ())->layout ().guiding_shape_layer ()) {
|
if (s->layer () == view ()->cellview (s->cv_index ())->layout ().guiding_shape_layer ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("This function cannot be applied to PCell guiding shapes")));
|
throw tl::Exception (tl::to_string (tr ("This function cannot be applied to PCell guiding shapes")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2294,7 +2385,7 @@ class NewObjectsSelection
|
||||||
: public db::ClipboardDataInsertReceiver
|
: public db::ClipboardDataInsertReceiver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NewObjectsSelection (int cv_index, db::cell_index_type topcell, lay::LayoutView *view)
|
NewObjectsSelection (int cv_index, db::cell_index_type topcell, lay::LayoutViewBase *view)
|
||||||
: m_cv_index (cv_index), m_topcell (topcell)
|
: m_cv_index (cv_index), m_topcell (topcell)
|
||||||
{
|
{
|
||||||
mp_polygon_service = view->get_plugin <edt::PolygonService> ();
|
mp_polygon_service = view->get_plugin <edt::PolygonService> ();
|
||||||
|
|
@ -2374,7 +2465,7 @@ MainService::paste ()
|
||||||
if (value) {
|
if (value) {
|
||||||
|
|
||||||
if (! cv.is_valid ()) {
|
if (! cv.is_valid ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("No cell selected to paste something into")));
|
throw tl::Exception (tl::to_string (tr ("No cell selected to paste something into")));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned int> nl = value->get ().insert (cv->layout (), cv.context_trans ().inverted (), &cv->layout ().cell (cv.cell_index ()), 0 /*new_tops*/, &insert_notification);
|
std::vector<unsigned int> nl = value->get ().insert (cv->layout (), cv.context_trans ().inverted (), &cv->layout ().cell (cv.cell_index ()), 0 /*new_tops*/, &insert_notification);
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief The constructor
|
* @brief The constructor
|
||||||
*/
|
*/
|
||||||
MainService (db::Manager *manager, lay::LayoutView *view, lay::Dispatcher *root);
|
MainService (db::Manager *manager, lay::LayoutViewBase *view, lay::Dispatcher *root);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The destructor
|
* @brief The destructor
|
||||||
|
|
@ -74,7 +74,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Access to the view object
|
* @brief Access to the view object
|
||||||
*/
|
*/
|
||||||
lay::LayoutView *view () const
|
lay::LayoutViewBase *view () const
|
||||||
{
|
{
|
||||||
return mp_view;
|
return mp_view;
|
||||||
}
|
}
|
||||||
|
|
@ -196,7 +196,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// The layout view that this service is attached to
|
// The layout view that this service is attached to
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
lay::Dispatcher *mp_root;
|
lay::Dispatcher *mp_root;
|
||||||
bool m_needs_update;
|
bool m_needs_update;
|
||||||
|
|
||||||
|
|
@ -221,21 +221,25 @@ private:
|
||||||
double m_router, m_rinner;
|
double m_router, m_rinner;
|
||||||
unsigned int m_npoints;
|
unsigned int m_npoints;
|
||||||
bool m_undo_before_apply;
|
bool m_undo_before_apply;
|
||||||
|
#if defined(HAVE_QT)
|
||||||
edt::RoundCornerOptionsDialog *mp_round_corners_dialog;
|
edt::RoundCornerOptionsDialog *mp_round_corners_dialog;
|
||||||
edt::AlignOptionsDialog *mp_align_options_dialog;
|
edt::AlignOptionsDialog *mp_align_options_dialog;
|
||||||
edt::DistributeOptionsDialog *mp_distribute_options_dialog;
|
edt::DistributeOptionsDialog *mp_distribute_options_dialog;
|
||||||
lay::FlattenInstOptionsDialog *mp_flatten_inst_options_dialog;
|
lay::FlattenInstOptionsDialog *mp_flatten_inst_options_dialog;
|
||||||
edt::MakeCellOptionsDialog *mp_make_cell_options_dialog;
|
edt::MakeCellOptionsDialog *mp_make_cell_options_dialog;
|
||||||
edt::MakeArrayOptionsDialog *mp_make_array_options_dialog;
|
edt::MakeArrayOptionsDialog *mp_make_array_options_dialog;
|
||||||
|
#endif
|
||||||
|
|
||||||
void boolean_op (int mode);
|
void boolean_op (int mode);
|
||||||
void check_no_guiding_shapes ();
|
void check_no_guiding_shapes ();
|
||||||
|
#if defined(HAVE_QT)
|
||||||
edt::RoundCornerOptionsDialog *round_corners_dialog ();
|
edt::RoundCornerOptionsDialog *round_corners_dialog ();
|
||||||
edt::AlignOptionsDialog *align_options_dialog ();
|
edt::AlignOptionsDialog *align_options_dialog ();
|
||||||
edt::DistributeOptionsDialog *distribute_options_dialog ();
|
edt::DistributeOptionsDialog *distribute_options_dialog ();
|
||||||
lay::FlattenInstOptionsDialog *flatten_inst_options_dialog ();
|
lay::FlattenInstOptionsDialog *flatten_inst_options_dialog ();
|
||||||
edt::MakeCellOptionsDialog *make_cell_options_dialog ();
|
edt::MakeCellOptionsDialog *make_cell_options_dialog ();
|
||||||
edt::MakeArrayOptionsDialog *make_array_options_dialog ();
|
edt::MakeArrayOptionsDialog *make_array_options_dialog ();
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,13 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "edtPCellParametersPage.h"
|
#include "edtPCellParametersPage.h"
|
||||||
#include "edtPropertiesPageUtils.h"
|
#include "edtPropertiesPageUtils.h"
|
||||||
#include "layWidgets.h"
|
#include "layWidgets.h"
|
||||||
#include "layQtTools.h"
|
#include "layQtTools.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "tlScriptError.h"
|
#include "tlScriptError.h"
|
||||||
|
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
|
|
@ -232,7 +233,7 @@ PCellParametersPage::lazy_evaluation ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PCellParametersPage::setup (lay::LayoutView *view, int cv_index, const db::PCellDeclaration *pcell_decl, const db::pcell_parameters_type ¶meters)
|
PCellParametersPage::setup (lay::LayoutViewBase *view, int cv_index, const db::PCellDeclaration *pcell_decl, const db::pcell_parameters_type ¶meters)
|
||||||
{
|
{
|
||||||
mp_pcell_decl.reset (const_cast<db::PCellDeclaration *> (pcell_decl)); // no const weak_ptr ...
|
mp_pcell_decl.reset (const_cast<db::PCellDeclaration *> (pcell_decl)); // no const weak_ptr ...
|
||||||
mp_view = view;
|
mp_view = view;
|
||||||
|
|
@ -732,4 +733,4 @@ PCellParametersPage::set_parameters_internal (const std::vector<tl::Variant> &pa
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_edtPCellParametersPage
|
#ifndef HDR_edtPCellParametersPage
|
||||||
#define HDR_edtPCellParametersPage
|
#define HDR_edtPCellParametersPage
|
||||||
|
|
@ -34,7 +35,7 @@
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
class LayoutView;
|
class LayoutViewBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace edt
|
namespace edt
|
||||||
|
|
@ -79,7 +80,7 @@ public:
|
||||||
* @param pcell_decl The PCell declaration
|
* @param pcell_decl The PCell declaration
|
||||||
* @param parameters The parameter values to show (if empty, the default values are used)
|
* @param parameters The parameter values to show (if empty, the default values are used)
|
||||||
*/
|
*/
|
||||||
void setup (lay::LayoutView *view, int cv_index, const db::PCellDeclaration *pcell_decl, const db::pcell_parameters_type ¶meters);
|
void setup (lay::LayoutViewBase *view, int cv_index, const db::PCellDeclaration *pcell_decl, const db::pcell_parameters_type ¶meters);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Gets the pages current state
|
* @brief Gets the pages current state
|
||||||
|
|
@ -140,7 +141,7 @@ private:
|
||||||
QFrame *mp_error_frame, *mp_update_frame;
|
QFrame *mp_error_frame, *mp_update_frame;
|
||||||
tl::weak_ptr<db::PCellDeclaration> mp_pcell_decl;
|
tl::weak_ptr<db::PCellDeclaration> mp_pcell_decl;
|
||||||
std::vector<QWidget *> m_widgets;
|
std::vector<QWidget *> m_widgets;
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
int m_cv_index;
|
int m_cv_index;
|
||||||
db::pcell_parameters_type m_parameters;
|
db::pcell_parameters_type m_parameters;
|
||||||
bool m_dense;
|
bool m_dense;
|
||||||
|
|
@ -157,3 +158,5 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -21,19 +21,20 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <QMessageBox>
|
|
||||||
|
|
||||||
#include "dbVector.h"
|
#include "dbVector.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "laySnap.h"
|
#include "laySnap.h"
|
||||||
#include "layFinder.h"
|
#include "layFinder.h"
|
||||||
#include "tlProgress.h"
|
#include "tlProgress.h"
|
||||||
#include "edtPartialService.h"
|
#include "edtPartialService.h"
|
||||||
#include "edtService.h"
|
#include "edtService.h"
|
||||||
#include "edtConfig.h"
|
#include "edtConfig.h"
|
||||||
#include "edtDialogs.h"
|
|
||||||
#include "edtPlugin.h"
|
#include "edtPlugin.h"
|
||||||
#include "edtEditorOptionsPages.h"
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
# include "edtDialogs.h"
|
||||||
|
# include "edtEditorOptionsPages.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
|
@ -1010,8 +1011,10 @@ PartialShapeFinder::visit_cell (const db::Cell &cell, const db::Box &search_box,
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Main Service implementation
|
// Main Service implementation
|
||||||
|
|
||||||
PartialService::PartialService (db::Manager *manager, lay::LayoutView *view, lay::Dispatcher *root)
|
PartialService::PartialService (db::Manager *manager, lay::LayoutViewBase *view, lay::Dispatcher *root) :
|
||||||
: QObject (),
|
#if defined(HAVE_QT)
|
||||||
|
QObject (),
|
||||||
|
#endif
|
||||||
lay::EditorServiceBase (view),
|
lay::EditorServiceBase (view),
|
||||||
db::Object (manager),
|
db::Object (manager),
|
||||||
mp_view (view),
|
mp_view (view),
|
||||||
|
|
@ -1027,9 +1030,11 @@ PartialService::PartialService (db::Manager *manager, lay::LayoutView *view, lay
|
||||||
m_hover (false),
|
m_hover (false),
|
||||||
m_hover_wait (false)
|
m_hover_wait (false)
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_QT)
|
||||||
m_timer.setInterval (100 /*hover time*/);
|
m_timer.setInterval (100 /*hover time*/);
|
||||||
m_timer.setSingleShot (true);
|
m_timer.setSingleShot (true);
|
||||||
connect (&m_timer, SIGNAL (timeout ()), this, SLOT (timeout ()));
|
connect (&m_timer, SIGNAL (timeout ()), this, SLOT (timeout ()));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PartialService::~PartialService ()
|
PartialService::~PartialService ()
|
||||||
|
|
@ -1077,7 +1082,9 @@ void
|
||||||
PartialService::hover_reset ()
|
PartialService::hover_reset ()
|
||||||
{
|
{
|
||||||
if (m_hover_wait) {
|
if (m_hover_wait) {
|
||||||
|
#if defined(HAVE_QT)
|
||||||
m_timer.stop ();
|
m_timer.stop ();
|
||||||
|
#endif
|
||||||
m_hover_wait = false;
|
m_hover_wait = false;
|
||||||
}
|
}
|
||||||
if (m_hover) {
|
if (m_hover) {
|
||||||
|
|
@ -1086,6 +1093,8 @@ PartialService::hover_reset ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: should receive timer calls from regular timer update
|
||||||
|
#if defined(HAVE_QT)
|
||||||
void
|
void
|
||||||
PartialService::timeout ()
|
PartialService::timeout ()
|
||||||
{
|
{
|
||||||
|
|
@ -1209,6 +1218,7 @@ PartialService::timeout ()
|
||||||
resize_inst_markers (n_inst_marker, true);
|
resize_inst_markers (n_inst_marker, true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
PartialService::clear_partial_transient_selection ()
|
PartialService::clear_partial_transient_selection ()
|
||||||
|
|
@ -1220,7 +1230,7 @@ PartialService::clear_partial_transient_selection ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PartialService::set_colors (QColor /*background*/, QColor color)
|
PartialService::set_colors (lay::Color /*background*/, lay::Color color)
|
||||||
{
|
{
|
||||||
m_color = color.rgb ();
|
m_color = color.rgb ();
|
||||||
if (mp_box) {
|
if (mp_box) {
|
||||||
|
|
@ -1571,7 +1581,9 @@ PartialService::mouse_move_event (const db::DPoint &p, unsigned int buttons, boo
|
||||||
} else if (view ()->transient_selection_mode ()) {
|
} else if (view ()->transient_selection_mode ()) {
|
||||||
|
|
||||||
m_hover_wait = true;
|
m_hover_wait = true;
|
||||||
|
#if defined(HAVE_QT)
|
||||||
m_timer.start ();
|
m_timer.start ();
|
||||||
|
#endif
|
||||||
m_hover_point = p;
|
m_hover_point = p;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1622,8 +1634,7 @@ PartialService::mouse_press_event (const db::DPoint &p, unsigned int buttons, bo
|
||||||
try {
|
try {
|
||||||
partial_select (db::DBox (p, p), lay::Editable::Replace);
|
partial_select (db::DBox (p, p), lay::Editable::Replace);
|
||||||
} catch (tl::Exception &ex) {
|
} catch (tl::Exception &ex) {
|
||||||
tl::error << ex.msg ();
|
show_error (ex);
|
||||||
QMessageBox::critical (0, QObject::tr ("Error"), tl::to_qstring (ex.msg ()));
|
|
||||||
// clear selection
|
// clear selection
|
||||||
partial_select (db::DBox (), lay::Editable::Reset);
|
partial_select (db::DBox (), lay::Editable::Reset);
|
||||||
}
|
}
|
||||||
|
|
@ -1703,7 +1714,7 @@ PartialService::mouse_click_event (const db::DPoint &p, unsigned int buttons, bo
|
||||||
// stop dragging
|
// stop dragging
|
||||||
widget ()->ungrab_mouse (this);
|
widget ()->ungrab_mouse (this);
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Partial move")));
|
manager ()->transaction (tl::to_string (tr ("Partial move")));
|
||||||
|
|
||||||
// heuristically, if there is just one edge selected: do not confine to the movement
|
// heuristically, if there is just one edge selected: do not confine to the movement
|
||||||
// angle constraint - the edge usually is confined enough
|
// angle constraint - the edge usually is confined enough
|
||||||
|
|
@ -1862,8 +1873,7 @@ PartialService::mouse_click_event (const db::DPoint &p, unsigned int buttons, bo
|
||||||
selection_to_view ();
|
selection_to_view ();
|
||||||
|
|
||||||
} catch (tl::Exception &ex) {
|
} catch (tl::Exception &ex) {
|
||||||
tl::error << ex.msg ();
|
show_error (ex);
|
||||||
QMessageBox::critical (0, QObject::tr ("Error"), tl::to_qstring (ex.msg ()));
|
|
||||||
// clear selection
|
// clear selection
|
||||||
partial_select (db::DBox (), lay::Editable::Reset);
|
partial_select (db::DBox (), lay::Editable::Reset);
|
||||||
}
|
}
|
||||||
|
|
@ -1901,7 +1911,7 @@ PartialService::mouse_double_click_event (const db::DPoint &p, unsigned int butt
|
||||||
partial_objects::iterator r = m_selection.begin (); // we assert above that we have at least one selected element
|
partial_objects::iterator r = m_selection.begin (); // we assert above that we have at least one selected element
|
||||||
if (! r->first.is_cell_inst ()) {
|
if (! r->first.is_cell_inst ()) {
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Insert point")));
|
manager ()->transaction (tl::to_string (tr ("Insert point")));
|
||||||
|
|
||||||
// snap the point
|
// snap the point
|
||||||
db::DPoint new_point_d = snap (p);
|
db::DPoint new_point_d = snap (p);
|
||||||
|
|
@ -2018,8 +2028,7 @@ PartialService::mouse_release_event (const db::DPoint &p, unsigned int buttons,
|
||||||
try {
|
try {
|
||||||
partial_select (db::DBox (m_p1, m_p2), mode);
|
partial_select (db::DBox (m_p1, m_p2), mode);
|
||||||
} catch (tl::Exception &ex) {
|
} catch (tl::Exception &ex) {
|
||||||
tl::error << ex.msg ();
|
show_error (ex);
|
||||||
QMessageBox::critical (0, QObject::tr ("Error"), tl::to_qstring (ex.msg ()));
|
|
||||||
// clear selection
|
// clear selection
|
||||||
partial_select (db::DBox (), lay::Editable::Reset);
|
partial_select (db::DBox (), lay::Editable::Reset);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,10 @@
|
||||||
#include "edtUtils.h"
|
#include "edtUtils.h"
|
||||||
#include "edtConfig.h"
|
#include "edtConfig.h"
|
||||||
|
|
||||||
#include <QObject>
|
#if defined(HAVE_QT)
|
||||||
#include <QTimer>
|
# include <QObject>
|
||||||
|
# include <QTimer>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace db {
|
namespace db {
|
||||||
class Manager;
|
class Manager;
|
||||||
|
|
@ -136,12 +138,16 @@ struct EdgeWithIndex
|
||||||
/**
|
/**
|
||||||
* @brief The partial selection and manipulation service
|
* @brief The partial selection and manipulation service
|
||||||
*/
|
*/
|
||||||
class PartialService
|
class PartialService :
|
||||||
: public QObject,
|
#if defined(HAVE_QT)
|
||||||
|
public QObject,
|
||||||
|
#endif
|
||||||
public lay::EditorServiceBase,
|
public lay::EditorServiceBase,
|
||||||
public db::Object
|
public db::Object
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_QT)
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef std::map<lay::ObjectInstPath, std::set<EdgeWithIndex> > partial_objects;
|
typedef std::map<lay::ObjectInstPath, std::set<EdgeWithIndex> > partial_objects;
|
||||||
|
|
@ -149,7 +155,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief The constructor
|
* @brief The constructor
|
||||||
*/
|
*/
|
||||||
PartialService (db::Manager *manager, lay::LayoutView *view, lay::Dispatcher *root);
|
PartialService (db::Manager *manager, lay::LayoutViewBase *view, lay::Dispatcher *root);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The destructor
|
* @brief The destructor
|
||||||
|
|
@ -159,7 +165,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Access to the view object
|
* @brief Access to the view object
|
||||||
*/
|
*/
|
||||||
lay::LayoutView *view () const
|
lay::LayoutViewBase *view () const
|
||||||
{
|
{
|
||||||
tl_assert (mp_view != 0);
|
tl_assert (mp_view != 0);
|
||||||
return mp_view;
|
return mp_view;
|
||||||
|
|
@ -282,15 +288,17 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Reimplementation of the ViewService interface: set the colors
|
* @brief Reimplementation of the ViewService interface: set the colors
|
||||||
*/
|
*/
|
||||||
virtual void set_colors (QColor background, QColor text);
|
virtual void set_colors (lay::Color background, lay::Color text);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Cancel any edit operations (in this case, unselect all & cancel any drag operation)
|
* @brief Cancel any edit operations (in this case, unselect all & cancel any drag operation)
|
||||||
*/
|
*/
|
||||||
virtual void edit_cancel ();
|
virtual void edit_cancel ();
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
public slots:
|
public slots:
|
||||||
void timeout ();
|
void timeout ();
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
lay::angle_constraint_type connect_ac () const;
|
lay::angle_constraint_type connect_ac () const;
|
||||||
|
|
@ -298,7 +306,7 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// The layout view that this service is attached to
|
// The layout view that this service is attached to
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
lay::Dispatcher *mp_root;
|
lay::Dispatcher *mp_root;
|
||||||
bool m_dragging;
|
bool m_dragging;
|
||||||
bool m_keep_selection;
|
bool m_keep_selection;
|
||||||
|
|
@ -324,7 +332,9 @@ private:
|
||||||
std::vector<lay::InstanceMarker *> m_inst_markers;
|
std::vector<lay::InstanceMarker *> m_inst_markers;
|
||||||
std::vector<lay::InstanceMarker *> m_transient_inst_markers;
|
std::vector<lay::InstanceMarker *> m_transient_inst_markers;
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
QTimer m_timer;
|
QTimer m_timer;
|
||||||
|
#endif
|
||||||
bool m_hover;
|
bool m_hover;
|
||||||
bool m_hover_wait;
|
bool m_hover_wait;
|
||||||
db::DPoint m_hover_point;
|
db::DPoint m_hover_point;
|
||||||
|
|
|
||||||
|
|
@ -21,36 +21,49 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "layTipDialog.h"
|
#if defined(HAVE_QT)
|
||||||
#include "layEditorOptionsPages.h"
|
# include "layTipDialog.h"
|
||||||
|
# include "layEditorOptionsPages.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "layDispatcher.h"
|
#include "layDispatcher.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "edtPlugin.h"
|
#include "edtPlugin.h"
|
||||||
#include "edtConfig.h"
|
#include "edtConfig.h"
|
||||||
#include "edtService.h"
|
#include "edtService.h"
|
||||||
#include "edtServiceImpl.h"
|
#include "edtServiceImpl.h"
|
||||||
#include "edtMainService.h"
|
#include "edtMainService.h"
|
||||||
#include "edtPartialService.h"
|
#include "edtPartialService.h"
|
||||||
#include "edtEditorOptionsPages.h"
|
#if defined(HAVE_QT)
|
||||||
#include "edtRecentConfigurationPage.h"
|
# include "edtEditorOptionsPages.h"
|
||||||
|
# include "edtRecentConfigurationPage.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <QApplication>
|
#if defined(HAVE_QT)
|
||||||
#include <QLayout>
|
# include <QApplication>
|
||||||
|
# include <QLayout>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace edt
|
namespace edt
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
edt::RecentConfigurationPage::ConfigurationDescriptor shape_cfg_descriptors[] =
|
edt::RecentConfigurationPage::ConfigurationDescriptor shape_cfg_descriptors[] =
|
||||||
{
|
{
|
||||||
edt::RecentConfigurationPage::ConfigurationDescriptor ("", tl::to_string (tr ("Layer")), edt::RecentConfigurationPage::Layer),
|
edt::RecentConfigurationPage::ConfigurationDescriptor ("", tl::to_string (tr ("Layer")), edt::RecentConfigurationPage::Layer),
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
static
|
static
|
||||||
void get_shape_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
void get_shape_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
{
|
{
|
||||||
ret.push_back (new RecentConfigurationPage (view, dispatcher, "edit-recent-shape-param",
|
ret.push_back (new RecentConfigurationPage (view, dispatcher, "edit-recent-shape-param",
|
||||||
&shape_cfg_descriptors[0], &shape_cfg_descriptors[sizeof (shape_cfg_descriptors) / sizeof (shape_cfg_descriptors[0])]));
|
&shape_cfg_descriptors[0], &shape_cfg_descriptors[sizeof (shape_cfg_descriptors) / sizeof (shape_cfg_descriptors[0])]));
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static void get_shape_editor_options_pages () { }
|
||||||
|
#endif
|
||||||
|
|
||||||
static
|
static
|
||||||
void get_text_options (std::vector < std::pair<std::string, std::string> > &options)
|
void get_text_options (std::vector < std::pair<std::string, std::string> > &options)
|
||||||
|
|
@ -61,8 +74,9 @@ void get_text_options (std::vector < std::pair<std::string, std::string> > &opti
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_edit_text_valign, "bottom"));
|
options.push_back (std::pair<std::string, std::string> (cfg_edit_text_valign, "bottom"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
static
|
static
|
||||||
void get_text_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
void get_text_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
{
|
{
|
||||||
static edt::RecentConfigurationPage::ConfigurationDescriptor text_cfg_descriptors[] =
|
static edt::RecentConfigurationPage::ConfigurationDescriptor text_cfg_descriptors[] =
|
||||||
{
|
{
|
||||||
|
|
@ -77,6 +91,9 @@ void get_text_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret,
|
||||||
&text_cfg_descriptors[0], &text_cfg_descriptors[sizeof (text_cfg_descriptors) / sizeof (text_cfg_descriptors[0])]));
|
&text_cfg_descriptors[0], &text_cfg_descriptors[sizeof (text_cfg_descriptors) / sizeof (text_cfg_descriptors[0])]));
|
||||||
ret.push_back (new edt::EditorOptionsText (view, dispatcher));
|
ret.push_back (new edt::EditorOptionsText (view, dispatcher));
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static void get_text_editor_options_pages () { }
|
||||||
|
#endif
|
||||||
|
|
||||||
static
|
static
|
||||||
void get_path_options (std::vector < std::pair<std::string, std::string> > &options)
|
void get_path_options (std::vector < std::pair<std::string, std::string> > &options)
|
||||||
|
|
@ -87,8 +104,9 @@ void get_path_options (std::vector < std::pair<std::string, std::string> > &opti
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_edit_path_ext_var_end, "0.0"));
|
options.push_back (std::pair<std::string, std::string> (cfg_edit_path_ext_var_end, "0.0"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
static
|
static
|
||||||
void get_path_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
void get_path_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
{
|
{
|
||||||
static edt::RecentConfigurationPage::ConfigurationDescriptor path_cfg_descriptors[] =
|
static edt::RecentConfigurationPage::ConfigurationDescriptor path_cfg_descriptors[] =
|
||||||
{
|
{
|
||||||
|
|
@ -103,6 +121,9 @@ void get_path_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret,
|
||||||
&path_cfg_descriptors[0], &path_cfg_descriptors[sizeof (path_cfg_descriptors) / sizeof (path_cfg_descriptors[0])]));
|
&path_cfg_descriptors[0], &path_cfg_descriptors[sizeof (path_cfg_descriptors) / sizeof (path_cfg_descriptors[0])]));
|
||||||
ret.push_back (new EditorOptionsPath (view, dispatcher));
|
ret.push_back (new EditorOptionsPath (view, dispatcher));
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static void get_path_editor_options_pages () { }
|
||||||
|
#endif
|
||||||
|
|
||||||
static
|
static
|
||||||
void get_inst_options (std::vector < std::pair<std::string, std::string> > &options)
|
void get_inst_options (std::vector < std::pair<std::string, std::string> > &options)
|
||||||
|
|
@ -123,8 +144,9 @@ void get_inst_options (std::vector < std::pair<std::string, std::string> > &opti
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_edit_show_shapes_of_instances, "true"));
|
options.push_back (std::pair<std::string, std::string> (cfg_edit_show_shapes_of_instances, "true"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
static
|
static
|
||||||
void get_inst_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutView *view, lay::Dispatcher *dispatcher)
|
void get_inst_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret, lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
|
||||||
{
|
{
|
||||||
static edt::RecentConfigurationPage::ConfigurationDescriptor inst_cfg_descriptors[] =
|
static edt::RecentConfigurationPage::ConfigurationDescriptor inst_cfg_descriptors[] =
|
||||||
{
|
{
|
||||||
|
|
@ -148,19 +170,32 @@ void get_inst_editor_options_pages (std::vector<lay::EditorOptionsPage *> &ret,
|
||||||
ret.push_back (new EditorOptionsInstPCellParam (view, dispatcher));
|
ret.push_back (new EditorOptionsInstPCellParam (view, dispatcher));
|
||||||
ret.push_back (new EditorOptionsInst (view, dispatcher));
|
ret.push_back (new EditorOptionsInst (view, dispatcher));
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static void get_inst_editor_options_pages () { }
|
||||||
|
#endif
|
||||||
|
|
||||||
template <class Svc>
|
template <class Svc>
|
||||||
class PluginDeclaration
|
class PluginDeclaration
|
||||||
: public PluginDeclarationBase
|
: public PluginDeclarationBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
#if defined(HAVE_QT)
|
||||||
PluginDeclaration (const std::string &title, const std::string &mouse_mode,
|
PluginDeclaration (const std::string &title, const std::string &mouse_mode,
|
||||||
void (*option_get_f) (std::vector < std::pair<std::string, std::string> > &) = 0,
|
void (*option_get_f) (std::vector < std::pair<std::string, std::string> > &) = 0,
|
||||||
void (*pages_f) (std::vector <lay::EditorOptionsPage *> &, lay::LayoutView *, lay::Dispatcher *) = 0)
|
void (*pages_f) (std::vector <lay::EditorOptionsPage *> &, lay::LayoutViewBase *, lay::Dispatcher *) = 0)
|
||||||
: m_title (title), m_mouse_mode (mouse_mode), mp_option_get_f (option_get_f), mp_pages_f (pages_f)
|
: m_title (title), m_mouse_mode (mouse_mode), mp_option_get_f (option_get_f), mp_pages_f (pages_f)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
PluginDeclaration (const std::string &title, const std::string &mouse_mode,
|
||||||
|
void (*option_get_f) (std::vector < std::pair<std::string, std::string> > &) = 0,
|
||||||
|
void (*pages_f) () = 0)
|
||||||
|
: m_title (title), m_mouse_mode (mouse_mode), mp_option_get_f (option_get_f), mp_pages_f (pages_f)
|
||||||
|
{
|
||||||
|
// .. nothing yet ..
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void get_options (std::vector < std::pair<std::string, std::string> > &options) const
|
virtual void get_options (std::vector < std::pair<std::string, std::string> > &options) const
|
||||||
{
|
{
|
||||||
|
|
@ -169,17 +204,20 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual lay::ConfigPage *config_page (QWidget * /*parent*/, std::string & /*title*/) const
|
virtual lay::ConfigPage *config_page (QWidget * /*parent*/, std::string & /*title*/) const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void get_menu_entries (std::vector<lay::MenuEntry> & /*menu_entries*/) const
|
virtual void get_menu_entries (std::vector<lay::MenuEntry> & /*menu_entries*/) const
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void get_editor_options_pages (std::vector<lay::EditorOptionsPage *> &pages, lay::LayoutView *view, lay::Dispatcher *root) const
|
#if defined(HAVE_QT)
|
||||||
|
virtual void get_editor_options_pages (std::vector<lay::EditorOptionsPage *> &pages, lay::LayoutViewBase *view, lay::Dispatcher *root) const
|
||||||
{
|
{
|
||||||
if (mp_pages_f != 0) {
|
if (mp_pages_f != 0) {
|
||||||
size_t nstart = pages.size ();
|
size_t nstart = pages.size ();
|
||||||
|
|
@ -189,8 +227,9 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutView *view) const
|
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
Svc *service = new Svc (manager, view);
|
Svc *service = new Svc (manager, view);
|
||||||
service->set_plugin_declaration (this);
|
service->set_plugin_declaration (this);
|
||||||
|
|
@ -214,31 +253,35 @@ private:
|
||||||
std::string m_mouse_mode;
|
std::string m_mouse_mode;
|
||||||
|
|
||||||
void (*mp_option_get_f) (std::vector < std::pair<std::string, std::string> > &options);
|
void (*mp_option_get_f) (std::vector < std::pair<std::string, std::string> > &options);
|
||||||
void (*mp_pages_f) (std::vector <lay::EditorOptionsPage *> &, lay::LayoutView *, lay::Dispatcher *);
|
#if defined(HAVE_QT)
|
||||||
|
void (*mp_pages_f) (std::vector <lay::EditorOptionsPage *> &, lay::LayoutViewBase *, lay::Dispatcher *);
|
||||||
|
#else
|
||||||
|
void (*mp_pages_f) ();
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl1 (
|
static tl::RegisteredClass<lay::PluginDeclaration> config_decl1 (
|
||||||
new edt::PluginDeclaration<edt::PolygonService> (tl::to_string (QObject::tr ("Polygons")), "polygon:edit_mode\t" + tl::to_string (QObject::tr ("Polygon")) + "<:polygon.png>" + tl::to_string (QObject::tr ("{Create a polygon}")), 0, &get_shape_editor_options_pages),
|
new edt::PluginDeclaration<edt::PolygonService> (tl::to_string (tr ("Polygons")), "polygon:edit_mode\t" + tl::to_string (tr ("Polygon")) + "<:polygon.png>" + tl::to_string (tr ("{Create a polygon}")), 0, &get_shape_editor_options_pages),
|
||||||
4010,
|
4010,
|
||||||
"edt::Service(Polygons)"
|
"edt::Service(Polygons)"
|
||||||
);
|
);
|
||||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl2 (
|
static tl::RegisteredClass<lay::PluginDeclaration> config_decl2 (
|
||||||
new edt::PluginDeclaration<edt::BoxService> (tl::to_string (QObject::tr ("Boxes")), "box:edit_mode\t" + tl::to_string (QObject::tr ("Box")) + "\t<:box.png>" + tl::to_string (QObject::tr ("{Create a box}")), 0, &get_shape_editor_options_pages),
|
new edt::PluginDeclaration<edt::BoxService> (tl::to_string (tr ("Boxes")), "box:edit_mode\t" + tl::to_string (tr ("Box")) + "\t<:box.png>" + tl::to_string (tr ("{Create a box}")), 0, &get_shape_editor_options_pages),
|
||||||
4011,
|
4011,
|
||||||
"edt::Service(Boxes)"
|
"edt::Service(Boxes)"
|
||||||
);
|
);
|
||||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl3 (
|
static tl::RegisteredClass<lay::PluginDeclaration> config_decl3 (
|
||||||
new edt::PluginDeclaration<edt::TextService> (tl::to_string (QObject::tr ("Texts")), "text:edit_mode\t" + tl::to_string (QObject::tr ("Text")) + "\t<:text.png>" + tl::to_string (QObject::tr ("{Create a text object}")), &get_text_options, &get_text_editor_options_pages),
|
new edt::PluginDeclaration<edt::TextService> (tl::to_string (tr ("Texts")), "text:edit_mode\t" + tl::to_string (tr ("Text")) + "\t<:text.png>" + tl::to_string (tr ("{Create a text object}")), &get_text_options, &get_text_editor_options_pages),
|
||||||
4012,
|
4012,
|
||||||
"edt::Service(Texts)"
|
"edt::Service(Texts)"
|
||||||
);
|
);
|
||||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl4 (
|
static tl::RegisteredClass<lay::PluginDeclaration> config_decl4 (
|
||||||
new edt::PluginDeclaration<edt::PathService> (tl::to_string (QObject::tr ("Paths")), "path:edit_mode\t" + tl::to_string (QObject::tr ("Path")) + "\t<:path.png>" + tl::to_string (QObject::tr ("{Create a path}")), &get_path_options, &get_path_editor_options_pages),
|
new edt::PluginDeclaration<edt::PathService> (tl::to_string (tr ("Paths")), "path:edit_mode\t" + tl::to_string (tr ("Path")) + "\t<:path.png>" + tl::to_string (tr ("{Create a path}")), &get_path_options, &get_path_editor_options_pages),
|
||||||
4013,
|
4013,
|
||||||
"edt::Service(Paths)"
|
"edt::Service(Paths)"
|
||||||
);
|
);
|
||||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl5 (
|
static tl::RegisteredClass<lay::PluginDeclaration> config_decl5 (
|
||||||
new edt::PluginDeclaration<edt::InstService> (tl::to_string (QObject::tr ("Instances")), "instance:edit_mode\t" + tl::to_string (QObject::tr ("Instance")) + "\t<:instance.png>" + tl::to_string (QObject::tr ("{Create a cell instance}")), &get_inst_options, &get_inst_editor_options_pages),
|
new edt::PluginDeclaration<edt::InstService> (tl::to_string (tr ("Instances")), "instance:edit_mode\t" + tl::to_string (tr ("Instance")) + "\t<:instance.png>" + tl::to_string (tr ("{Create a cell instance}")), &get_inst_options, &get_inst_editor_options_pages),
|
||||||
4020,
|
4020,
|
||||||
"edt::Service(CellInstances)"
|
"edt::Service(CellInstances)"
|
||||||
);
|
);
|
||||||
|
|
@ -264,41 +307,43 @@ public:
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_edit_combine_mode, "add"));
|
options.push_back (std::pair<std::string, std::string> (cfg_edit_combine_mode, "add"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual lay::ConfigPage *config_page (QWidget * /*parent*/, std::string & /*title*/) const
|
virtual lay::ConfigPage *config_page (QWidget * /*parent*/, std::string & /*title*/) const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const
|
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const
|
||||||
{
|
{
|
||||||
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
||||||
|
|
||||||
menu_entries.push_back (lay::separator ("edt::hier_group", "zoom_menu.end"));
|
menu_entries.push_back (lay::separator ("edt::hier_group", "zoom_menu.end"));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::descend", "descend", "zoom_menu.end", tl::to_string (QObject::tr ("Descend")) + "(Ctrl+D)"));
|
menu_entries.push_back (lay::menu_item ("edt::descend", "descend", "zoom_menu.end", tl::to_string (tr ("Descend")) + "(Ctrl+D)"));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::ascend", "ascend", "zoom_menu.end", tl::to_string (QObject::tr ("Ascend")) + "(Ctrl+A)"));
|
menu_entries.push_back (lay::menu_item ("edt::ascend", "ascend", "zoom_menu.end", tl::to_string (tr ("Ascend")) + "(Ctrl+A)"));
|
||||||
|
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_make_array", "make_array:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Make Array"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_make_array", "make_array:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Make Array"))));
|
||||||
menu_entries.push_back (lay::separator ("selection_group:edit_mode", "edit_menu.selection_menu.end"));
|
menu_entries.push_back (lay::separator ("selection_group:edit_mode", "edit_menu.selection_menu.end"));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_change_layer", "change_layer:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Change Layer"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_change_layer", "change_layer:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Change Layer"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_tap", "tap", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Tap")) + "(T)"));
|
menu_entries.push_back (lay::menu_item ("edt::sel_tap", "tap", "edit_menu.selection_menu.end", tl::to_string (tr ("Tap")) + "(T)"));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_align", "align:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Align"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_align", "align:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Align"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_distribute", "distribute:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Distribute"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_distribute", "distribute:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Distribute"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_round_corners", "round_corners:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Round Corners"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_round_corners", "round_corners:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Round Corners"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_size", "size:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Size Shapes"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_size", "size:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Size Shapes"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_union", "union:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Merge Shapes"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_union", "union:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Merge Shapes"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_intersection", "intersection:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Intersection - Others With First"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_intersection", "intersection:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Intersection - Others With First"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_difference", "difference:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Subtraction - Others From First"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_difference", "difference:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Subtraction - Others From First"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_separate", "separate:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Separate - First into Inside/Outside Others"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_separate", "separate:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Separate - First into Inside/Outside Others"))));
|
||||||
menu_entries.push_back (lay::separator ("hier_group:edit_mode", "edit_menu.selection_menu.end"));
|
menu_entries.push_back (lay::separator ("hier_group:edit_mode", "edit_menu.selection_menu.end"));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_flatten_insts", "flatten_insts:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Flatten Instances"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_flatten_insts", "flatten_insts:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Flatten Instances"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_resolve_arefs", "resolve_arefs:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Resolve Arrays"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_resolve_arefs", "resolve_arefs:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Resolve Arrays"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_move_hier_up", "move_hier_up:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Move Up In Hierarchy"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_move_hier_up", "move_hier_up:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Move Up In Hierarchy"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_make_cell", "make_cell:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Make Cell"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_make_cell", "make_cell:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Make Cell"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_make_cell_variants", "make_cell_variants:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Make Cell Variants"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_make_cell_variants", "make_cell_variants:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Make Cell Variants"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_convert_to_pcell", "convert_to_pcell:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Convert To PCell"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_convert_to_pcell", "convert_to_pcell:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Convert To PCell"))));
|
||||||
menu_entries.push_back (lay::menu_item ("edt::sel_convert_to_cell", "convert_to_cell:edit_mode", "edit_menu.selection_menu.end", tl::to_string (QObject::tr ("Convert To Static Cell"))));
|
menu_entries.push_back (lay::menu_item ("edt::sel_convert_to_cell", "convert_to_cell:edit_mode", "edit_menu.selection_menu.end", tl::to_string (tr ("Convert To Static Cell"))));
|
||||||
|
|
||||||
menu_entries.push_back (lay::menu_item ("edt::combine_mode", "combine_mode:edit_mode", "@toolbar.end_modes", tl::to_string (QObject::tr ("Combine{Select background combination mode}"))));
|
menu_entries.push_back (lay::menu_item ("edt::combine_mode", "combine_mode:edit_mode", "@toolbar.end_modes", tl::to_string (tr ("Combine{Select background combination mode}"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool configure (const std::string &name, const std::string &value)
|
bool configure (const std::string &name, const std::string &value)
|
||||||
|
|
@ -312,7 +357,7 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *root, lay::LayoutView *view) const
|
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
return new edt::MainService (manager, view, root);
|
return new edt::MainService (manager, view, root);
|
||||||
}
|
}
|
||||||
|
|
@ -327,12 +372,14 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void get_editor_options_pages (std::vector<lay::EditorOptionsPage *> &pages, lay::LayoutView *view, lay::Dispatcher *dispatcher) const
|
#if defined(HAVE_QT)
|
||||||
|
virtual void get_editor_options_pages (std::vector<lay::EditorOptionsPage *> &pages, lay::LayoutViewBase *view, lay::Dispatcher *dispatcher) const
|
||||||
{
|
{
|
||||||
// NOTE: we do not set plugin_declaration which makes the page unspecific
|
// NOTE: we do not set plugin_declaration which makes the page unspecific
|
||||||
EditorOptionsGeneric *generic_opt = new EditorOptionsGeneric (view, dispatcher);
|
EditorOptionsGeneric *generic_opt = new EditorOptionsGeneric (view, dispatcher);
|
||||||
pages.push_back (generic_opt);
|
pages.push_back (generic_opt);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void initialize (lay::Dispatcher *root)
|
virtual void initialize (lay::Dispatcher *root)
|
||||||
{
|
{
|
||||||
|
|
@ -343,18 +390,21 @@ public:
|
||||||
|
|
||||||
mp_root = root;
|
mp_root = root;
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
// add entries to the combine mode dialog
|
// add entries to the combine mode dialog
|
||||||
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_add", new lay::ConfigureAction (tl::to_string (QObject::tr ("Add<:/cm_add.png>{Add shapes}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Add)));
|
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_add", new lay::ConfigureAction (tl::to_string (tr ("Add<:/cm_add.png>{Add shapes}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Add)));
|
||||||
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_merge", new lay::ConfigureAction (tl::to_string (QObject::tr ("Merge<:/cm_merge.png>{Merge shapes with background}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Merge)));
|
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_merge", new lay::ConfigureAction (tl::to_string (tr ("Merge<:/cm_merge.png>{Merge shapes with background}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Merge)));
|
||||||
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_erase", new lay::ConfigureAction (tl::to_string (QObject::tr ("Erase<:/cm_erase.png>{Erase shape from background}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Erase)));
|
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_erase", new lay::ConfigureAction (tl::to_string (tr ("Erase<:/cm_erase.png>{Erase shape from background}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Erase)));
|
||||||
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_mask", new lay::ConfigureAction (tl::to_string (QObject::tr ("Mask<:/cm_mask.png>{Mask background with shape}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Mask)));
|
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_mask", new lay::ConfigureAction (tl::to_string (tr ("Mask<:/cm_mask.png>{Mask background with shape}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Mask)));
|
||||||
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_diff", new lay::ConfigureAction (tl::to_string (QObject::tr ("Diff<:/cm_diff.png>{Compute difference of shape with background}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Diff)));
|
mp->menu ()->insert_item ("@toolbar.combine_mode.end", "combine_mode_diff", new lay::ConfigureAction (tl::to_string (tr ("Diff<:/cm_diff.png>{Compute difference of shape with background}")), cfg_edit_combine_mode, CMConverter ().to_string (CM_Diff)));
|
||||||
|
|
||||||
update_menu (CM_Add);
|
update_menu (CM_Add);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_menu (combine_mode_type cm)
|
void update_menu (combine_mode_type cm)
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
||||||
if (! mp || ! mp->has_ui ()) {
|
if (! mp || ! mp->has_ui ()) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -363,21 +413,22 @@ public:
|
||||||
lay::Action *combine_menu = mp->menu ()->action ("@toolbar.combine_mode");
|
lay::Action *combine_menu = mp->menu ()->action ("@toolbar.combine_mode");
|
||||||
|
|
||||||
if (cm == CM_Add) {
|
if (cm == CM_Add) {
|
||||||
combine_menu->set_title (tl::to_string (QObject::tr ("Add")));
|
combine_menu->set_title (tl::to_string (tr ("Add")));
|
||||||
combine_menu->set_icon (":/cm_add.png");
|
combine_menu->set_icon (":/cm_add.png");
|
||||||
} else if (cm == CM_Merge) {
|
} else if (cm == CM_Merge) {
|
||||||
combine_menu->set_title (tl::to_string (QObject::tr ("Merge")));
|
combine_menu->set_title (tl::to_string (tr ("Merge")));
|
||||||
combine_menu->set_icon (":/cm_merge.png");
|
combine_menu->set_icon (":/cm_merge.png");
|
||||||
} else if (cm == CM_Erase) {
|
} else if (cm == CM_Erase) {
|
||||||
combine_menu->set_title (tl::to_string (QObject::tr ("Erase")));
|
combine_menu->set_title (tl::to_string (tr ("Erase")));
|
||||||
combine_menu->set_icon (":/cm_erase.png");
|
combine_menu->set_icon (":/cm_erase.png");
|
||||||
} else if (cm == CM_Mask) {
|
} else if (cm == CM_Mask) {
|
||||||
combine_menu->set_title (tl::to_string (QObject::tr ("Mask")));
|
combine_menu->set_title (tl::to_string (tr ("Mask")));
|
||||||
combine_menu->set_icon (":/cm_mask.png");
|
combine_menu->set_icon (":/cm_mask.png");
|
||||||
} else if (cm == CM_Diff) {
|
} else if (cm == CM_Diff) {
|
||||||
combine_menu->set_title (tl::to_string (QObject::tr ("Diff")));
|
combine_menu->set_title (tl::to_string (tr ("Diff")));
|
||||||
combine_menu->set_icon (":/cm_diff.png");
|
combine_menu->set_icon (":/cm_diff.png");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialized (lay::Dispatcher *root)
|
void initialized (lay::Dispatcher *root)
|
||||||
|
|
@ -387,15 +438,18 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lay::Action *combine_menu = mp->menu ()->action ("@toolbar.combine_mode");
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
// Do some more initialization here.
|
// generate a warning if the combine mode isn't "Add"
|
||||||
|
|
||||||
combine_mode_type cm = CM_Add;
|
combine_mode_type cm = CM_Add;
|
||||||
root->config_get (cfg_edit_combine_mode, cm, CMConverter ());
|
root->config_get (cfg_edit_combine_mode, cm, CMConverter ());
|
||||||
|
|
||||||
|
lay::Action *combine_menu = mp->menu ()->action ("@toolbar.combine_mode");
|
||||||
|
|
||||||
if (cm != CM_Add && combine_menu->is_visible ()) {
|
if (cm != CM_Add && combine_menu->is_visible ()) {
|
||||||
lay::TipDialog td (QApplication::activeWindow (),
|
lay::TipDialog td (QApplication::activeWindow (),
|
||||||
tl::to_string (QObject::tr ("The background combination mode of the shape editor is set to some other mode than 'Add'.\n"
|
tl::to_string (tr ("The background combination mode of the shape editor is set to some other mode than 'Add'.\n"
|
||||||
"This can be confusing, because a shape may not be drawn as expected.\n\nTo switch back to normal mode, choose 'Add' for the background combination mode in the toolbar.")),
|
"This can be confusing, because a shape may not be drawn as expected.\n\nTo switch back to normal mode, choose 'Add' for the background combination mode in the toolbar.")),
|
||||||
"has-non-add-edit-combine-mode");
|
"has-non-add-edit-combine-mode");
|
||||||
if (td.exec_dialog ()) {
|
if (td.exec_dialog ()) {
|
||||||
|
|
@ -403,6 +457,8 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -410,12 +466,13 @@ private:
|
||||||
std::string m_title;
|
std::string m_title;
|
||||||
};
|
};
|
||||||
|
|
||||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl_main (new edt::MainPluginDeclaration (tl::to_string (QObject::tr ("Instances and shapes"))), 4000, "edt::MainService");
|
static tl::RegisteredClass<lay::PluginDeclaration> config_decl_main (new edt::MainPluginDeclaration (tl::to_string (tr ("Instances and shapes"))), 4000, "edt::MainService");
|
||||||
|
|
||||||
void
|
void
|
||||||
commit_recent (lay::LayoutView *view)
|
commit_recent (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
lay::EditorOptionsPages *eo_pages = view->editor_options_pages ();;
|
#if defined(HAVE_QT)
|
||||||
|
lay::EditorOptionsPages *eo_pages = view->editor_options_pages ();
|
||||||
if (!eo_pages) {
|
if (!eo_pages) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -425,6 +482,7 @@ commit_recent (lay::LayoutView *view)
|
||||||
(*op)->commit_recent (view);
|
(*op)->commit_recent (view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
class PartialPluginDeclaration
|
class PartialPluginDeclaration
|
||||||
|
|
@ -442,12 +500,12 @@ public:
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void get_editor_options_pages (std::vector<lay::EditorOptionsPage *> & /*pages*/, lay::LayoutView * /*view*/, lay::Dispatcher * /*root*/) const
|
virtual void get_editor_options_pages (std::vector<lay::EditorOptionsPage *> & /*pages*/, lay::LayoutViewBase * /*view*/, lay::Dispatcher * /*root*/) const
|
||||||
{
|
{
|
||||||
// .. no specific ones ..
|
// .. no specific ones ..
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *root, lay::LayoutView *view) const
|
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
return new edt::PartialService (manager, view, root);
|
return new edt::PartialService (manager, view, root);
|
||||||
}
|
}
|
||||||
|
|
@ -470,7 +528,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl30 (
|
static tl::RegisteredClass<lay::PluginDeclaration> config_decl30 (
|
||||||
new edt::PartialPluginDeclaration (tl::to_string (QObject::tr ("Partial shapes")), "partial:edit_mode\t" + tl::to_string (QObject::tr ("Partial{Edit points and edges of shapes}")) + "<:partial.png>"),
|
new edt::PartialPluginDeclaration (tl::to_string (tr ("Partial shapes")), "partial:edit_mode\t" + tl::to_string (tr ("Partial{Edit points and edges of shapes}")) + "<:partial.png>"),
|
||||||
4030,
|
4030,
|
||||||
"edt::PartialService"
|
"edt::PartialService"
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ namespace lay
|
||||||
{
|
{
|
||||||
class Dispatcher;
|
class Dispatcher;
|
||||||
class EditorOptionsPage;
|
class EditorOptionsPage;
|
||||||
|
class LayoutViewBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace edt
|
namespace edt
|
||||||
|
|
@ -48,7 +49,7 @@ namespace edt
|
||||||
/**
|
/**
|
||||||
* @brief Commits the current configuration for the recently used configuration list
|
* @brief Commits the current configuration for the recently used configuration list
|
||||||
*/
|
*/
|
||||||
void commit_recent (lay::LayoutView *view);
|
void commit_recent (lay::LayoutViewBase *view);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "edtPropertiesPageUtils.h"
|
#include "edtPropertiesPageUtils.h"
|
||||||
|
|
||||||
|
|
@ -870,3 +871,4 @@ coords_to_string (const db::DPoint &dp, double dbu, bool du, const char *sep)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_edtPropertiesPageUtils
|
#ifndef HDR_edtPropertiesPageUtils
|
||||||
#define HDR_edtPropertiesPageUtils
|
#define HDR_edtPropertiesPageUtils
|
||||||
|
|
@ -522,3 +523,4 @@ db::Coord coord_from_string (const char *txt, double dbu, bool du, const db::VCp
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "edtPropertiesPages.h"
|
#include "edtPropertiesPages.h"
|
||||||
#include "edtPropertiesPageUtils.h"
|
#include "edtPropertiesPageUtils.h"
|
||||||
|
|
@ -27,7 +28,7 @@
|
||||||
#include "edtPropertiesPageUtils.h"
|
#include "edtPropertiesPageUtils.h"
|
||||||
#include "layDialogs.h"
|
#include "layDialogs.h"
|
||||||
#include "layObjectInstPath.h"
|
#include "layObjectInstPath.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layQtTools.h"
|
#include "layQtTools.h"
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
#include "tlString.h"
|
#include "tlString.h"
|
||||||
|
|
@ -1183,3 +1184,4 @@ EditablePathPropertiesPage::type_selected (int t)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
|
|
||||||
#ifndef HDR_edtPropertiesPages
|
#ifndef HDR_edtPropertiesPages
|
||||||
|
|
@ -207,3 +208,5 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,12 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "edtRecentConfigurationPage.h"
|
#include "edtRecentConfigurationPage.h"
|
||||||
#include "edtUtils.h"
|
#include "edtUtils.h"
|
||||||
#include "layDispatcher.h"
|
#include "layDispatcher.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layLayerTreeModel.h"
|
#include "layLayerTreeModel.h"
|
||||||
#include "dbLibraryManager.h"
|
#include "dbLibraryManager.h"
|
||||||
#include "dbLibrary.h"
|
#include "dbLibrary.h"
|
||||||
|
|
@ -32,6 +34,7 @@
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
namespace edt
|
namespace edt
|
||||||
{
|
{
|
||||||
|
|
@ -131,7 +134,7 @@ RecentConfigurationPage::set_stored_values (const std::list<std::vector<std::str
|
||||||
}
|
}
|
||||||
|
|
||||||
static lay::LayerPropertiesConstIterator
|
static lay::LayerPropertiesConstIterator
|
||||||
lp_iter_from_string (lay::LayoutView *view, const std::string &s)
|
lp_iter_from_string (lay::LayoutViewBase *view, const std::string &s)
|
||||||
{
|
{
|
||||||
// parse the layer spec (<layer-props>[@<cv-index>])
|
// parse the layer spec (<layer-props>[@<cv-index>])
|
||||||
db::LayerProperties lp;
|
db::LayerProperties lp;
|
||||||
|
|
@ -179,7 +182,7 @@ RecentConfigurationPage::render_to (QTreeWidgetItem *item, int column, const std
|
||||||
|
|
||||||
case RecentConfigurationPage::Layer:
|
case RecentConfigurationPage::Layer:
|
||||||
{
|
{
|
||||||
int icon_size = view ()->style ()->pixelMetric (QStyle::PM_ButtonIconSize);
|
int icon_size = view ()->widget ()->style ()->pixelMetric (QStyle::PM_ButtonIconSize);
|
||||||
lay::LayerPropertiesConstIterator l;
|
lay::LayerPropertiesConstIterator l;
|
||||||
try {
|
try {
|
||||||
l = lp_iter_from_string (view (), values [column]);
|
l = lp_iter_from_string (view (), values [column]);
|
||||||
|
|
@ -344,6 +347,40 @@ RecentConfigurationPage::update_list (const std::list<std::vector<std::string> >
|
||||||
mp_tree_widget->header ()->resizeSections (QHeaderView::ResizeToContents);
|
mp_tree_widget->header ()->resizeSections (QHeaderView::ResizeToContents);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
set_or_request_current_layer (lay::LayoutViewBase *view, unsigned int cv_index, const db::LayerProperties &lp)
|
||||||
|
{
|
||||||
|
bool ok = view->set_current_layer (cv_index, lp);
|
||||||
|
if (ok) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! view->control_panel ()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const lay::CellView &cv = view->cellview (cv_index);
|
||||||
|
if (! cv.is_valid ()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (QMessageBox::question (view->widget (), tr ("Create Layer"), tr ("Layer %1 does not exist yet. Create it now?").arg (tl::to_qstring (lp.to_string ()))) == QMessageBox::Yes) {
|
||||||
|
|
||||||
|
lay::LayerPropertiesNode lpn;
|
||||||
|
lpn.set_source (lay::ParsedLayerSource (lp, cv_index));
|
||||||
|
view->init_layer_properties (lpn);
|
||||||
|
|
||||||
|
view->transaction (tl::to_string (QObject::tr ("Create new layer")));
|
||||||
|
view->set_current_layer (lay::LayerPropertiesConstIterator (& view->insert_layer (view->end_layers (), lpn)));
|
||||||
|
view->commit ();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RecentConfigurationPage::item_clicked (QTreeWidgetItem *item)
|
RecentConfigurationPage::item_clicked (QTreeWidgetItem *item)
|
||||||
{
|
{
|
||||||
|
|
@ -363,7 +400,7 @@ RecentConfigurationPage::item_clicked (QTreeWidgetItem *item)
|
||||||
ex.read (cv_index);
|
ex.read (cv_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
view ()->set_or_request_current_layer (cv_index, lp);
|
set_or_request_current_layer (view (), cv_index, lp);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
dispatcher ()->config_set (c->cfg_name, v);
|
dispatcher ()->config_set (c->cfg_name, v);
|
||||||
|
|
@ -428,3 +465,5 @@ RecentConfigurationPage::commit_recent (lay::Dispatcher *root)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_edtRecentConfigurationPage
|
#ifndef HDR_edtRecentConfigurationPage
|
||||||
#define HDR_edtRecentConfigurationPage
|
#define HDR_edtRecentConfigurationPage
|
||||||
|
|
@ -32,7 +33,7 @@
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
class LayoutView;
|
class LayoutViewBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace edt
|
namespace edt
|
||||||
|
|
@ -77,7 +78,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class Iter>
|
template <class Iter>
|
||||||
RecentConfigurationPage (lay::LayoutView *view, lay::Dispatcher *dispatcher, const std::string &recent_cfg_name, Iter begin_cfg, Iter end_cfg)
|
RecentConfigurationPage (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher, const std::string &recent_cfg_name, Iter begin_cfg, Iter end_cfg)
|
||||||
: EditorOptionsPage (view, dispatcher), m_recent_cfg_name (recent_cfg_name), m_cfg (begin_cfg, end_cfg)
|
: EditorOptionsPage (view, dispatcher), m_recent_cfg_name (recent_cfg_name), m_cfg (begin_cfg, end_cfg)
|
||||||
{
|
{
|
||||||
init ();
|
init ();
|
||||||
|
|
@ -112,3 +113,4 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,12 @@
|
||||||
#include "dbLibrary.h"
|
#include "dbLibrary.h"
|
||||||
#include "edtPlugin.h"
|
#include "edtPlugin.h"
|
||||||
#include "edtService.h"
|
#include "edtService.h"
|
||||||
#include "edtEditorOptionsPages.h"
|
#if defined(HAVE_QT)
|
||||||
#include "edtDialogs.h"
|
# include "edtEditorOptionsPages.h"
|
||||||
|
# include "edtDialogs.h"
|
||||||
|
#endif
|
||||||
#include "layFinder.h"
|
#include "layFinder.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "laySnap.h"
|
#include "laySnap.h"
|
||||||
#include "tlProgress.h"
|
#include "tlProgress.h"
|
||||||
#include "tlTimer.h"
|
#include "tlTimer.h"
|
||||||
|
|
@ -60,7 +62,7 @@ ac_from_buttons (unsigned int buttons)
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
|
||||||
Service::Service (db::Manager *manager, lay::LayoutView *view, db::ShapeIterator::flags_type flags)
|
Service::Service (db::Manager *manager, lay::LayoutViewBase *view, db::ShapeIterator::flags_type flags)
|
||||||
: lay::EditorServiceBase (view),
|
: lay::EditorServiceBase (view),
|
||||||
db::Object (manager),
|
db::Object (manager),
|
||||||
mp_view (view),
|
mp_view (view),
|
||||||
|
|
@ -80,7 +82,7 @@ Service::Service (db::Manager *manager, lay::LayoutView *view, db::ShapeIterator
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
Service::Service (db::Manager *manager, lay::LayoutView *view)
|
Service::Service (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: lay::EditorServiceBase (view),
|
: lay::EditorServiceBase (view),
|
||||||
db::Object (manager),
|
db::Object (manager),
|
||||||
mp_view (view),
|
mp_view (view),
|
||||||
|
|
@ -312,7 +314,8 @@ Service::copy ()
|
||||||
void
|
void
|
||||||
Service::copy_selected ()
|
Service::copy_selected ()
|
||||||
{
|
{
|
||||||
edt::CopyModeDialog mode_dialog (view ());
|
#if defined(HAVE_QT)
|
||||||
|
edt::CopyModeDialog mode_dialog (view ()->widget ());
|
||||||
|
|
||||||
bool need_to_ask_for_copy_mode = false;
|
bool need_to_ask_for_copy_mode = false;
|
||||||
unsigned int inst_mode = 0;
|
unsigned int inst_mode = 0;
|
||||||
|
|
@ -340,6 +343,24 @@ Service::copy_selected ()
|
||||||
dispatcher ()->config_end ();
|
dispatcher ()->config_end ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
copy_selected (inst_mode);
|
||||||
|
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
unsigned int inst_mode = 0;
|
||||||
|
if (m_hier_copy_mode >= 0) {
|
||||||
|
inst_mode = int (m_hier_copy_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
copy_selected (inst_mode);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Service::copy_selected (unsigned int inst_mode)
|
||||||
|
{
|
||||||
// create one ClipboardData object per cv_index because, this one assumes that there is
|
// create one ClipboardData object per cv_index because, this one assumes that there is
|
||||||
// only one source layout object.
|
// only one source layout object.
|
||||||
std::set <unsigned int> cv_indices;
|
std::set <unsigned int> cv_indices;
|
||||||
|
|
@ -366,8 +387,6 @@ Service::copy_selected ()
|
||||||
db::Clipboard::instance () += cd;
|
db::Clipboard::instance () += cd;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
@ -799,7 +818,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
||||||
bool
|
bool
|
||||||
Service::key_event (unsigned int key, unsigned int buttons)
|
Service::key_event (unsigned int key, unsigned int buttons)
|
||||||
{
|
{
|
||||||
if (view ()->is_editable () && m_editing && buttons == 0 && key == Qt::Key_Backspace) {
|
if (view ()->is_editable () && m_editing && buttons == 0 && key == lay::KeyBackspace) {
|
||||||
do_delete ();
|
do_delete ();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1141,7 +1160,7 @@ Service::display_status (bool transient)
|
||||||
|
|
||||||
std::string msg;
|
std::string msg;
|
||||||
if (! transient) {
|
if (! transient) {
|
||||||
msg = tl::to_string (QObject::tr ("selected: "));
|
msg = tl::to_string (tr ("selected: "));
|
||||||
}
|
}
|
||||||
|
|
||||||
db::Instance inst = r->back ().inst_ptr;
|
db::Instance inst = r->back ().inst_ptr;
|
||||||
|
|
@ -1149,12 +1168,12 @@ Service::display_status (bool transient)
|
||||||
db::Vector a, b;
|
db::Vector a, b;
|
||||||
unsigned long amax = 0, bmax = 0;
|
unsigned long amax = 0, bmax = 0;
|
||||||
if (! inst.is_regular_array (a, b, amax, bmax)) {
|
if (! inst.is_regular_array (a, b, amax, bmax)) {
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("instance(\"%s\" %s)")), layout.display_name (inst.cell_index ()), inst.complex_trans ().to_string ());
|
msg += tl::sprintf (tl::to_string (tr ("instance(\"%s\" %s)")), layout.display_name (inst.cell_index ()), inst.complex_trans ().to_string ());
|
||||||
} else {
|
} else {
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("instance(\"%s\" %s %ldx%ld)")), layout.display_name (inst.cell_index ()), inst.complex_trans ().to_string (), amax, bmax);
|
msg += tl::sprintf (tl::to_string (tr ("instance(\"%s\" %s %ldx%ld)")), layout.display_name (inst.cell_index ()), inst.complex_trans ().to_string (), amax, bmax);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg += tl::to_string (QObject::tr (" in "));
|
msg += tl::to_string (tr (" in "));
|
||||||
msg += path_to_string (layout, *r);
|
msg += path_to_string (layout, *r);
|
||||||
|
|
||||||
view ()->message (msg, transient ? 10 : 10000);
|
view ()->message (msg, transient ? 10 : 10000);
|
||||||
|
|
@ -1163,31 +1182,31 @@ Service::display_status (bool transient)
|
||||||
|
|
||||||
std::string msg;
|
std::string msg;
|
||||||
if (! transient) {
|
if (! transient) {
|
||||||
msg = tl::to_string (QObject::tr ("selected: "));
|
msg = tl::to_string (tr ("selected: "));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->shape ().is_box ()) {
|
if (r->shape ().is_box ()) {
|
||||||
db::Box b (r->shape ().bbox ());
|
db::Box b (r->shape ().bbox ());
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("box(%d,%d %d,%d)")), int (b.left ()), int (b.bottom ()), int (b.right ()), int (b.top ()));
|
msg += tl::sprintf (tl::to_string (tr ("box(%d,%d %d,%d)")), int (b.left ()), int (b.bottom ()), int (b.right ()), int (b.top ()));
|
||||||
} else if (r->shape ().is_text ()) {
|
} else if (r->shape ().is_text ()) {
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("text(\"%s\" %s)")), tl::escape_string (r->shape ().text_string ()), r->shape ().text_trans ().to_string ());
|
msg += tl::sprintf (tl::to_string (tr ("text(\"%s\" %s)")), tl::escape_string (r->shape ().text_string ()), r->shape ().text_trans ().to_string ());
|
||||||
} else if (r->shape ().is_polygon ()) {
|
} else if (r->shape ().is_polygon ()) {
|
||||||
size_t npoints = 0;
|
size_t npoints = 0;
|
||||||
for (db::Shape::polygon_edge_iterator e = r->shape ().begin_edge (); ! e.at_end (); ++e) {
|
for (db::Shape::polygon_edge_iterator e = r->shape ().begin_edge (); ! e.at_end (); ++e) {
|
||||||
++npoints;
|
++npoints;
|
||||||
}
|
}
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("polygon(#points=%lu)")), npoints);
|
msg += tl::sprintf (tl::to_string (tr ("polygon(#points=%lu)")), npoints);
|
||||||
} else if (r->shape ().is_path ()) {
|
} else if (r->shape ().is_path ()) {
|
||||||
size_t npoints = 0;
|
size_t npoints = 0;
|
||||||
for (db::Shape::point_iterator p = r->shape ().begin_point (); p != r->shape ().end_point (); ++p) {
|
for (db::Shape::point_iterator p = r->shape ().begin_point (); p != r->shape ().end_point (); ++p) {
|
||||||
++npoints;
|
++npoints;
|
||||||
}
|
}
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("path(w=%d #points=%lu)")), int (r->shape ().path_width ()), npoints);
|
msg += tl::sprintf (tl::to_string (tr ("path(w=%d #points=%lu)")), int (r->shape ().path_width ()), npoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! msg.empty ()) {
|
if (! msg.empty ()) {
|
||||||
|
|
||||||
msg += tl::to_string (QObject::tr (" on "));
|
msg += tl::to_string (tr (" on "));
|
||||||
|
|
||||||
std::string ln = layout.get_properties (r->layer ()).to_string ();
|
std::string ln = layout.get_properties (r->layer ()).to_string ();
|
||||||
for (lay::LayerPropertiesConstIterator lp = view ()->begin_layers (); ! lp.at_end (); ++lp) {
|
for (lay::LayerPropertiesConstIterator lp = view ()->begin_layers (); ! lp.at_end (); ++lp) {
|
||||||
|
|
@ -1198,7 +1217,7 @@ Service::display_status (bool transient)
|
||||||
}
|
}
|
||||||
msg += ln;
|
msg += ln;
|
||||||
|
|
||||||
msg += tl::to_string (QObject::tr (" in "));
|
msg += tl::to_string (tr (" in "));
|
||||||
msg += path_to_string (layout, *r);
|
msg += path_to_string (layout, *r);
|
||||||
|
|
||||||
view ()->message (msg, transient ? 10 : 10000);
|
view ()->message (msg, transient ? 10 : 10000);
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@
|
||||||
#include "layMarker.h"
|
#include "layMarker.h"
|
||||||
#include "laySnap.h"
|
#include "laySnap.h"
|
||||||
#include "layObjectInstPath.h"
|
#include "layObjectInstPath.h"
|
||||||
|
#include "layColor.h"
|
||||||
#include "dbLayout.h"
|
#include "dbLayout.h"
|
||||||
#include "dbShape.h"
|
#include "dbShape.h"
|
||||||
#include "edtUtils.h"
|
#include "edtUtils.h"
|
||||||
|
|
@ -41,7 +42,6 @@
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <QColor>
|
|
||||||
|
|
||||||
namespace lay {
|
namespace lay {
|
||||||
class LayerPropertiesConstIterator;
|
class LayerPropertiesConstIterator;
|
||||||
|
|
@ -83,12 +83,12 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief The constructor for an service selecting shapes
|
* @brief The constructor for an service selecting shapes
|
||||||
*/
|
*/
|
||||||
Service (db::Manager *manager, lay::LayoutView *view, db::ShapeIterator::flags_type shape_types);
|
Service (db::Manager *manager, lay::LayoutViewBase *view, db::ShapeIterator::flags_type shape_types);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The constructor for an service selecting instances
|
* @brief The constructor for an service selecting instances
|
||||||
*/
|
*/
|
||||||
Service (db::Manager *manager, lay::LayoutView *view);
|
Service (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The destructor
|
* @brief The destructor
|
||||||
|
|
@ -220,7 +220,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Color accessor
|
* @brief Color accessor
|
||||||
*/
|
*/
|
||||||
QColor color () const
|
lay::Color color () const
|
||||||
{
|
{
|
||||||
return m_color;
|
return m_color;
|
||||||
}
|
}
|
||||||
|
|
@ -244,7 +244,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Access to the view object
|
* @brief Access to the view object
|
||||||
*/
|
*/
|
||||||
lay::LayoutView *view () const
|
lay::LayoutViewBase *view () const
|
||||||
{
|
{
|
||||||
tl_assert (mp_view != 0);
|
tl_assert (mp_view != 0);
|
||||||
return mp_view;
|
return mp_view;
|
||||||
|
|
@ -560,7 +560,7 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// The layout view that the editor service is attached to
|
// The layout view that the editor service is attached to
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
|
|
||||||
// The marker objects representing the selection
|
// The marker objects representing the selection
|
||||||
std::vector<lay::ViewObject *> m_markers;
|
std::vector<lay::ViewObject *> m_markers;
|
||||||
|
|
@ -593,7 +593,7 @@ private:
|
||||||
db::ShapeIterator::flags_type m_flags;
|
db::ShapeIterator::flags_type m_flags;
|
||||||
|
|
||||||
// The look of the markers
|
// The look of the markers
|
||||||
QColor m_color;
|
lay::Color m_color;
|
||||||
|
|
||||||
// The current transformation on movement
|
// The current transformation on movement
|
||||||
db::DTrans m_move_trans;
|
db::DTrans m_move_trans;
|
||||||
|
|
@ -645,6 +645,9 @@ private:
|
||||||
* @brief Display the status bar message for the given selection
|
* @brief Display the status bar message for the given selection
|
||||||
*/
|
*/
|
||||||
void display_status (bool transient);
|
void display_status (bool transient);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void copy_selected (unsigned int inst_mode);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,10 @@
|
||||||
|
|
||||||
#include "edtMainService.h"
|
#include "edtMainService.h"
|
||||||
#include "edtServiceImpl.h"
|
#include "edtServiceImpl.h"
|
||||||
#include "edtPropertiesPages.h"
|
#if defined(HAVE_QT)
|
||||||
#include "edtInstPropertiesPage.h"
|
# include "edtPropertiesPages.h"
|
||||||
|
# include "edtInstPropertiesPage.h"
|
||||||
|
#endif
|
||||||
#include "edtService.h"
|
#include "edtService.h"
|
||||||
#include "edtPlugin.h"
|
#include "edtPlugin.h"
|
||||||
#include "dbEdge.h"
|
#include "dbEdge.h"
|
||||||
|
|
@ -35,11 +37,16 @@
|
||||||
#include "dbEdgeProcessor.h"
|
#include "dbEdgeProcessor.h"
|
||||||
#include "layMarker.h"
|
#include "layMarker.h"
|
||||||
#include "layLayerProperties.h"
|
#include "layLayerProperties.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layTipDialog.h"
|
|
||||||
|
|
||||||
#include <QInputDialog>
|
#if defined(HAVE_QT)
|
||||||
#include <QApplication>
|
# include "layTipDialog.h"
|
||||||
|
# include "layDragDropData.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
# include <QApplication>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace edt
|
namespace edt
|
||||||
{
|
{
|
||||||
|
|
@ -47,7 +54,7 @@ namespace edt
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// ShapeEditService implementation
|
// ShapeEditService implementation
|
||||||
|
|
||||||
ShapeEditService::ShapeEditService (db::Manager *manager, lay::LayoutView *view, db::ShapeIterator::flags_type shape_types)
|
ShapeEditService::ShapeEditService (db::Manager *manager, lay::LayoutViewBase *view, db::ShapeIterator::flags_type shape_types)
|
||||||
: edt::Service (manager, view, shape_types),
|
: edt::Service (manager, view, shape_types),
|
||||||
m_layer (0), m_cv_index (0), mp_cell (0), mp_layout (0), m_combine_mode (CM_Add)
|
m_layer (0), m_cv_index (0), mp_cell (0), mp_layout (0), m_combine_mode (CM_Add)
|
||||||
{
|
{
|
||||||
|
|
@ -71,7 +78,7 @@ ShapeEditService::get_edit_layer ()
|
||||||
lay::LayerPropertiesConstIterator cl = view ()->current_layer ();
|
lay::LayerPropertiesConstIterator cl = view ()->current_layer ();
|
||||||
|
|
||||||
if (cl.is_null ()) {
|
if (cl.is_null ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Please select a layer first")));
|
throw tl::Exception (tl::to_string (tr ("Please select a layer first")));
|
||||||
}
|
}
|
||||||
|
|
||||||
int cv_index = cl->cellview_index ();
|
int cv_index = cl->cellview_index ();
|
||||||
|
|
@ -79,20 +86,22 @@ ShapeEditService::get_edit_layer ()
|
||||||
int layer = cl->layer_index ();
|
int layer = cl->layer_index ();
|
||||||
|
|
||||||
if (cv_index < 0 || ! cv.is_valid ()) {
|
if (cv_index < 0 || ! cv.is_valid ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Please select a cell first")));
|
throw tl::Exception (tl::to_string (tr ("Please select a cell first")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
if (! cl->visible (true)) {
|
if (! cl->visible (true)) {
|
||||||
lay::TipDialog td (QApplication::activeWindow (),
|
lay::TipDialog td (QApplication::activeWindow (),
|
||||||
tl::to_string (QObject::tr ("You are about to draw on a hidden layer. The result won't be visible.")),
|
tl::to_string (tr ("You are about to draw on a hidden layer. The result won't be visible.")),
|
||||||
"drawing-on-invisible-layer");
|
"drawing-on-invisible-layer");
|
||||||
td.exec_dialog ();
|
td.exec_dialog ();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (layer < 0 || ! cv->layout ().is_valid_layer ((unsigned int) layer)) {
|
if (layer < 0 || ! cv->layout ().is_valid_layer ((unsigned int) layer)) {
|
||||||
|
|
||||||
if (cl->has_children ()) {
|
if (cl->has_children ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Please select a valid drawing layer first")));
|
throw tl::Exception (tl::to_string (tr ("Please select a valid drawing layer first")));
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// create this layer now
|
// create this layer now
|
||||||
|
|
@ -125,7 +134,7 @@ ShapeEditService::get_edit_layer ()
|
||||||
mp_cell = &(mp_layout->cell (cv.cell_index ()));
|
mp_cell = &(mp_layout->cell (cv.cell_index ()));
|
||||||
|
|
||||||
if (mp_cell->is_proxy ()) {
|
if (mp_cell->is_proxy ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Cannot put a shape into a PCell or library cell")));
|
throw tl::Exception (tl::to_string (tr ("Cannot put a shape into a PCell or library cell")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -152,12 +161,14 @@ ShapeEditService::update_edit_layer (const lay::LayerPropertiesConstIterator &cl
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
if (! cl->visible (true)) {
|
if (! cl->visible (true)) {
|
||||||
lay::TipDialog td (QApplication::activeWindow (),
|
lay::TipDialog td (QApplication::activeWindow (),
|
||||||
tl::to_string (QObject::tr ("You are now drawing on a hidden layer. The result won't be visible.")),
|
tl::to_string (tr ("You are now drawing on a hidden layer. The result won't be visible.")),
|
||||||
"drawing-on-invisible-layer");
|
"drawing-on-invisible-layer");
|
||||||
td.exec_dialog ();
|
td.exec_dialog ();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (layer < 0 || ! cv->layout ().is_valid_layer ((unsigned int) layer)) {
|
if (layer < 0 || ! cv->layout ().is_valid_layer ((unsigned int) layer)) {
|
||||||
|
|
||||||
|
|
@ -255,7 +266,7 @@ ShapeEditService::deliver_shape (const db::Polygon &poly)
|
||||||
{
|
{
|
||||||
if (m_combine_mode == CM_Add) {
|
if (m_combine_mode == CM_Add) {
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create polygon")));
|
manager ()->transaction (tl::to_string (tr ("Create polygon")));
|
||||||
cell ().shapes (layer ()).insert (poly);
|
cell ().shapes (layer ()).insert (poly);
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
|
|
||||||
|
|
@ -315,7 +326,7 @@ ShapeEditService::deliver_shape (const db::Polygon &poly)
|
||||||
result = input;
|
result = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Combine shape with background")));
|
manager ()->transaction (tl::to_string (tr ("Combine shape with background")));
|
||||||
|
|
||||||
// Erase existing shapes
|
// Erase existing shapes
|
||||||
for (std::vector<db::Shape>::const_iterator s = shapes.begin (); s != shapes.end (); ++s) {
|
for (std::vector<db::Shape>::const_iterator s = shapes.begin (); s != shapes.end (); ++s) {
|
||||||
|
|
@ -339,7 +350,7 @@ void
|
||||||
ShapeEditService::deliver_shape (const db::Path &path)
|
ShapeEditService::deliver_shape (const db::Path &path)
|
||||||
{
|
{
|
||||||
if (m_combine_mode == CM_Add) {
|
if (m_combine_mode == CM_Add) {
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create path")));
|
manager ()->transaction (tl::to_string (tr ("Create path")));
|
||||||
cell ().shapes (layer ()).insert (path);
|
cell ().shapes (layer ()).insert (path);
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -351,7 +362,7 @@ void
|
||||||
ShapeEditService::deliver_shape (const db::Box &box)
|
ShapeEditService::deliver_shape (const db::Box &box)
|
||||||
{
|
{
|
||||||
if (m_combine_mode == CM_Add) {
|
if (m_combine_mode == CM_Add) {
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create box")));
|
manager ()->transaction (tl::to_string (tr ("Create box")));
|
||||||
cell ().shapes (layer ()).insert (box);
|
cell ().shapes (layer ()).insert (box);
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -362,18 +373,20 @@ ShapeEditService::deliver_shape (const db::Box &box)
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// PolygonService implementation
|
// PolygonService implementation
|
||||||
|
|
||||||
PolygonService::PolygonService (db::Manager *manager, lay::LayoutView *view)
|
PolygonService::PolygonService (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: ShapeEditService (manager, view, db::ShapeIterator::Polygons),
|
: ShapeEditService (manager, view, db::ShapeIterator::Polygons),
|
||||||
m_closure_set (false), m_closure ()
|
m_closure_set (false), m_closure ()
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::PropertiesPage *
|
lay::PropertiesPage *
|
||||||
PolygonService::properties_page (db::Manager *manager, QWidget *parent)
|
PolygonService::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
{
|
{
|
||||||
return new edt::PolygonPropertiesPage (this, manager, parent);
|
return new edt::PolygonPropertiesPage (this, manager, parent);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
PolygonService::do_begin_edit (const db::DPoint &p)
|
PolygonService::do_begin_edit (const db::DPoint &p)
|
||||||
|
|
@ -468,7 +481,7 @@ PolygonService::get_polygon () const
|
||||||
db::Polygon poly;
|
db::Polygon poly;
|
||||||
|
|
||||||
if (m_points.size () < 4) {
|
if (m_points.size () < 4) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("A polygon must have at least 3 points")));
|
throw tl::Exception (tl::to_string (tr ("A polygon must have at least 3 points")));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<db::Point> points_dbu;
|
std::vector<db::Point> points_dbu;
|
||||||
|
|
@ -485,7 +498,7 @@ PolygonService::get_polygon () const
|
||||||
poly.assign_hull (points_dbu.begin (), points_dbu.end (), true, true /*remove reflected*/);
|
poly.assign_hull (points_dbu.begin (), points_dbu.end (), true, true /*remove reflected*/);
|
||||||
|
|
||||||
if (poly.hull ().size () < 3) {
|
if (poly.hull ().size () < 3) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("A polygon must have at least 3 effective points")));
|
throw tl::Exception (tl::to_string (tr ("A polygon must have at least 3 effective points")));
|
||||||
}
|
}
|
||||||
|
|
||||||
return poly;
|
return poly;
|
||||||
|
|
@ -692,17 +705,19 @@ PolygonService::update_marker ()
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// BoxService implementation
|
// BoxService implementation
|
||||||
|
|
||||||
BoxService::BoxService (db::Manager *manager, lay::LayoutView *view)
|
BoxService::BoxService (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: ShapeEditService (manager, view, db::ShapeIterator::Boxes)
|
: ShapeEditService (manager, view, db::ShapeIterator::Boxes)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::PropertiesPage *
|
lay::PropertiesPage *
|
||||||
BoxService::properties_page (db::Manager *manager, QWidget *parent)
|
BoxService::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
{
|
{
|
||||||
return new edt::BoxPropertiesPage (this, manager, parent);
|
return new edt::BoxPropertiesPage (this, manager, parent);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
BoxService::do_begin_edit (const db::DPoint &p)
|
BoxService::do_begin_edit (const db::DPoint &p)
|
||||||
|
|
@ -784,7 +799,7 @@ BoxService::selection_applies (const lay::ObjectInstPath &sel) const
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// TextService implementation
|
// TextService implementation
|
||||||
|
|
||||||
TextService::TextService (db::Manager *manager, lay::LayoutView *view)
|
TextService::TextService (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: ShapeEditService (manager, view, db::ShapeIterator::Texts),
|
: ShapeEditService (manager, view, db::ShapeIterator::Texts),
|
||||||
m_rot (0)
|
m_rot (0)
|
||||||
{
|
{
|
||||||
|
|
@ -796,11 +811,13 @@ TextService::~TextService ()
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::PropertiesPage *
|
lay::PropertiesPage *
|
||||||
TextService::properties_page (db::Manager *manager, QWidget *parent)
|
TextService::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
{
|
{
|
||||||
return new edt::TextPropertiesPage (this, manager, parent);
|
return new edt::TextPropertiesPage (this, manager, parent);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
TextService::do_begin_edit (const db::DPoint &p)
|
TextService::do_begin_edit (const db::DPoint &p)
|
||||||
|
|
@ -889,16 +906,17 @@ TextService::do_finish_edit ()
|
||||||
{
|
{
|
||||||
get_edit_layer ();
|
get_edit_layer ();
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create text")));
|
manager ()->transaction (tl::to_string (tr ("Create text")));
|
||||||
cell ().shapes (layer ()).insert (get_text ());
|
cell ().shapes (layer ()).insert (get_text ());
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
|
|
||||||
commit_recent (view ());
|
commit_recent (view ());
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
if (! view ()->text_visible ()) {
|
if (! view ()->text_visible ()) {
|
||||||
|
|
||||||
lay::TipDialog td (QApplication::activeWindow (),
|
lay::TipDialog td (QApplication::activeWindow (),
|
||||||
tl::to_string (QObject::tr ("A text object is created but texts are disabled for drawing and are not visible. Do you want to enable drawing of texts?\n\nChoose \"Yes\" to enable text drawing now.")),
|
tl::to_string (tr ("A text object is created but texts are disabled for drawing and are not visible. Do you want to enable drawing of texts?\n\nChoose \"Yes\" to enable text drawing now.")),
|
||||||
"text-created-but-not-visible",
|
"text-created-but-not-visible",
|
||||||
lay::TipDialog::yesno_buttons);
|
lay::TipDialog::yesno_buttons);
|
||||||
|
|
||||||
|
|
@ -909,6 +927,7 @@ TextService::do_finish_edit ()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -972,7 +991,7 @@ TextService::configure (const std::string &name, const std::string &value)
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// PathService implementation
|
// PathService implementation
|
||||||
|
|
||||||
PathService::PathService (db::Manager *manager, lay::LayoutView *view)
|
PathService::PathService (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: ShapeEditService (manager, view, db::ShapeIterator::Paths),
|
: ShapeEditService (manager, view, db::ShapeIterator::Paths),
|
||||||
m_width (0.1), m_bgnext (0.0), m_endext (0.0), m_type (Flush), m_needs_update (true)
|
m_width (0.1), m_bgnext (0.0), m_endext (0.0), m_type (Flush), m_needs_update (true)
|
||||||
{
|
{
|
||||||
|
|
@ -984,6 +1003,7 @@ PathService::~PathService ()
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::PropertiesPage *
|
lay::PropertiesPage *
|
||||||
PathService::properties_page (db::Manager *manager, QWidget *parent)
|
PathService::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
{
|
{
|
||||||
|
|
@ -993,6 +1013,7 @@ PathService::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
return new edt::PathPropertiesPage (this, manager, parent);
|
return new edt::PathPropertiesPage (this, manager, parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
PathService::do_begin_edit (const db::DPoint &p)
|
PathService::do_begin_edit (const db::DPoint &p)
|
||||||
|
|
@ -1083,7 +1104,7 @@ PathService::do_finish_edit ()
|
||||||
{
|
{
|
||||||
// one point is reserved for the "current one"
|
// one point is reserved for the "current one"
|
||||||
if (m_points.size () < 3) {
|
if (m_points.size () < 3) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("A path must have at least 2 points")));
|
throw tl::Exception (tl::to_string (tr ("A path must have at least 2 points")));
|
||||||
}
|
}
|
||||||
m_points.pop_back ();
|
m_points.pop_back ();
|
||||||
|
|
||||||
|
|
@ -1211,7 +1232,7 @@ PathService::config_finalize ()
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// InstService implementation
|
// InstService implementation
|
||||||
|
|
||||||
InstService::InstService (db::Manager *manager, lay::LayoutView *view)
|
InstService::InstService (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: edt::Service (manager, view),
|
: edt::Service (manager, view),
|
||||||
m_angle (0.0), m_scale (1.0),
|
m_angle (0.0), m_scale (1.0),
|
||||||
m_mirror (false), m_is_pcell (false),
|
m_mirror (false), m_is_pcell (false),
|
||||||
|
|
@ -1224,11 +1245,13 @@ InstService::InstService (db::Manager *manager, lay::LayoutView *view)
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::PropertiesPage *
|
lay::PropertiesPage *
|
||||||
InstService::properties_page (db::Manager *manager, QWidget *parent)
|
InstService::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
{
|
{
|
||||||
return new edt::InstPropertiesPage (this, manager, parent);
|
return new edt::InstPropertiesPage (this, manager, parent);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool
|
bool
|
||||||
InstService::do_activated ()
|
InstService::do_activated ()
|
||||||
|
|
@ -1253,6 +1276,7 @@ InstService::get_default_layer_for_pcell ()
|
||||||
return tl::Variant ();
|
return tl::Variant ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
bool
|
bool
|
||||||
InstService::drag_enter_event (const db::DPoint &p, const lay::DragDropDataBase *data)
|
InstService::drag_enter_event (const db::DPoint &p, const lay::DragDropDataBase *data)
|
||||||
{
|
{
|
||||||
|
|
@ -1343,18 +1367,19 @@ InstService::drag_leave_event ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
InstService::selection_applies (const lay::ObjectInstPath &sel) const
|
|
||||||
{
|
|
||||||
return sel.is_cell_inst ();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
InstService::drop_event (const db::DPoint & /*p*/, const lay::DragDropDataBase * /*data*/)
|
InstService::drop_event (const db::DPoint & /*p*/, const lay::DragDropDataBase * /*data*/)
|
||||||
{
|
{
|
||||||
m_in_drag_drop = false;
|
m_in_drag_drop = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool
|
||||||
|
InstService::selection_applies (const lay::ObjectInstPath &sel) const
|
||||||
|
{
|
||||||
|
return sel.is_cell_inst ();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
InstService::sync_to_config ()
|
InstService::sync_to_config ()
|
||||||
|
|
@ -1383,7 +1408,7 @@ InstService::do_begin_edit (const db::DPoint &p)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cv.cell ()->is_proxy ()) {
|
if (cv.cell ()->is_proxy ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Cannot put an instance into a PCell or library cell")));
|
throw tl::Exception (tl::to_string (tr ("Cannot put an instance into a PCell or library cell")));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_trans = cv.context_trans ();
|
m_trans = cv.context_trans ();
|
||||||
|
|
@ -1429,7 +1454,7 @@ InstService::make_cell (const lay::CellView &cv)
|
||||||
// NOTE: do this at the beginning: creating a transaction might delete transactions behind the
|
// NOTE: do this at the beginning: creating a transaction might delete transactions behind the
|
||||||
// head transaction, hence releasing (thus: deleting) cells. To prevert interference, create
|
// head transaction, hence releasing (thus: deleting) cells. To prevert interference, create
|
||||||
// the transaction at the beginning.
|
// the transaction at the beginning.
|
||||||
db::Transaction tr (manager (), tl::to_string (QObject::tr ("Create reference cell")), m_reference_transaction_id);
|
db::Transaction transaction (manager (), tl::to_string (tr ("Create reference cell")), m_reference_transaction_id);
|
||||||
|
|
||||||
lay::LayerState layer_state = view ()->layer_snapshot ();
|
lay::LayerState layer_state = view ()->layer_snapshot ();
|
||||||
|
|
||||||
|
|
@ -1497,8 +1522,8 @@ InstService::make_cell (const lay::CellView &cv)
|
||||||
m_has_valid_cell = true;
|
m_has_valid_cell = true;
|
||||||
m_current_cell = inst_cell_index;
|
m_current_cell = inst_cell_index;
|
||||||
|
|
||||||
if (! tr.is_empty ()) {
|
if (! transaction.is_empty ()) {
|
||||||
m_reference_transaction_id = tr.id ();
|
m_reference_transaction_id = transaction.id ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::pair<bool, db::cell_index_type> (true, inst_cell_index);
|
return std::pair<bool, db::cell_index_type> (true, inst_cell_index);
|
||||||
|
|
@ -1596,10 +1621,10 @@ InstService::do_finish_edit ()
|
||||||
std::vector <db::cell_index_type> intersection;
|
std::vector <db::cell_index_type> intersection;
|
||||||
std::set_intersection (called.begin (), called.end (), callers.begin (), callers.end (), std::back_inserter (intersection));
|
std::set_intersection (called.begin (), called.end (), callers.begin (), callers.end (), std::back_inserter (intersection));
|
||||||
if (! intersection.empty ()) {
|
if (! intersection.empty ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("Inserting this instance would create a recursive hierarchy")));
|
throw tl::Exception (tl::to_string (tr ("Inserting this instance would create a recursive hierarchy")));
|
||||||
}
|
}
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Create instance")), m_reference_transaction_id);
|
manager ()->transaction (tl::to_string (tr ("Create instance")), m_reference_transaction_id);
|
||||||
m_reference_transaction_id = 0;
|
m_reference_transaction_id = 0;
|
||||||
db::Instance i = cv->layout ().cell (cv.cell_index ()).insert (inst);
|
db::Instance i = cv->layout ().cell (cv.cell_index ()).insert (inst);
|
||||||
cv->layout ().cleanup ();
|
cv->layout ().cleanup ();
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
class CellView;
|
class CellView;
|
||||||
|
class LayoutViewBase;
|
||||||
class LayerPropertiesConstIterator;
|
class LayerPropertiesConstIterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,7 +46,7 @@ class ShapeEditService
|
||||||
: public edt::Service
|
: public edt::Service
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ShapeEditService (db::Manager *manager, lay::LayoutView *view, db::ShapeIterator::flags_type shape_types);
|
ShapeEditService (db::Manager *manager, lay::LayoutViewBase *view, db::ShapeIterator::flags_type shape_types);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void get_edit_layer ();
|
void get_edit_layer ();
|
||||||
|
|
@ -86,9 +87,11 @@ class PolygonService
|
||||||
: public ShapeEditService
|
: public ShapeEditService
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PolygonService (db::Manager *manager, lay::LayoutView *view);
|
PolygonService (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||||
|
#endif
|
||||||
virtual void do_delete ();
|
virtual void do_delete ();
|
||||||
virtual void do_begin_edit (const db::DPoint &p);
|
virtual void do_begin_edit (const db::DPoint &p);
|
||||||
virtual void do_mouse_move (const db::DPoint &p);
|
virtual void do_mouse_move (const db::DPoint &p);
|
||||||
|
|
@ -117,9 +120,11 @@ class BoxService
|
||||||
: public ShapeEditService
|
: public ShapeEditService
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BoxService (db::Manager *manager, lay::LayoutView *view);
|
BoxService (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||||
|
#endif
|
||||||
virtual void do_begin_edit (const db::DPoint &p);
|
virtual void do_begin_edit (const db::DPoint &p);
|
||||||
virtual void do_mouse_move (const db::DPoint &p);
|
virtual void do_mouse_move (const db::DPoint &p);
|
||||||
virtual void do_mouse_move_inactive (const db::DPoint &p);
|
virtual void do_mouse_move_inactive (const db::DPoint &p);
|
||||||
|
|
@ -142,10 +147,12 @@ class TextService
|
||||||
: public ShapeEditService
|
: public ShapeEditService
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TextService (db::Manager *manager, lay::LayoutView *view);
|
TextService (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
~TextService ();
|
~TextService ();
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||||
|
#endif
|
||||||
virtual void do_begin_edit (const db::DPoint &p);
|
virtual void do_begin_edit (const db::DPoint &p);
|
||||||
virtual void do_mouse_transform (const db::DPoint &p, db::DFTrans trans);
|
virtual void do_mouse_transform (const db::DPoint &p, db::DFTrans trans);
|
||||||
virtual void do_mouse_move (const db::DPoint &p);
|
virtual void do_mouse_move (const db::DPoint &p);
|
||||||
|
|
@ -174,10 +181,12 @@ class PathService
|
||||||
: public ShapeEditService
|
: public ShapeEditService
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PathService (db::Manager *manager, lay::LayoutView *view);
|
PathService (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
~PathService ();
|
~PathService ();
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||||
|
#endif
|
||||||
virtual void do_begin_edit (const db::DPoint &p);
|
virtual void do_begin_edit (const db::DPoint &p);
|
||||||
virtual void do_mouse_move (const db::DPoint &p);
|
virtual void do_mouse_move (const db::DPoint &p);
|
||||||
virtual bool do_mouse_click (const db::DPoint &p);
|
virtual bool do_mouse_click (const db::DPoint &p);
|
||||||
|
|
@ -211,9 +220,11 @@ class InstService
|
||||||
: public edt::Service
|
: public edt::Service
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InstService (db::Manager *manager, lay::LayoutView *view);
|
InstService (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||||
|
#endif
|
||||||
virtual void do_begin_edit (const db::DPoint &p);
|
virtual void do_begin_edit (const db::DPoint &p);
|
||||||
virtual void do_mouse_move_inactive (const db::DPoint &p);
|
virtual void do_mouse_move_inactive (const db::DPoint &p);
|
||||||
virtual void do_mouse_move (const db::DPoint &p);
|
virtual void do_mouse_move (const db::DPoint &p);
|
||||||
|
|
@ -222,10 +233,12 @@ public:
|
||||||
virtual void do_finish_edit ();
|
virtual void do_finish_edit ();
|
||||||
virtual void do_cancel_edit ();
|
virtual void do_cancel_edit ();
|
||||||
virtual bool do_activated ();
|
virtual bool do_activated ();
|
||||||
|
#if defined(HAVE_QT)
|
||||||
virtual bool drag_enter_event (const db::DPoint &p, const lay::DragDropDataBase *data);
|
virtual bool drag_enter_event (const db::DPoint &p, const lay::DragDropDataBase *data);
|
||||||
virtual bool drag_move_event (const db::DPoint &p, const lay::DragDropDataBase *data);
|
virtual bool drag_move_event (const db::DPoint &p, const lay::DragDropDataBase *data);
|
||||||
virtual void drag_leave_event ();
|
virtual void drag_leave_event ();
|
||||||
virtual bool drop_event (const db::DPoint &p, const lay::DragDropDataBase *data);
|
virtual bool drop_event (const db::DPoint &p, const lay::DragDropDataBase *data);
|
||||||
|
#endif
|
||||||
virtual bool selection_applies (const lay::ObjectInstPath &sel) const;
|
virtual bool selection_applies (const lay::ObjectInstPath &sel) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
#include "edtService.h"
|
#include "edtService.h"
|
||||||
|
|
||||||
#include "layCellView.h"
|
#include "layCellView.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "layEditable.h"
|
#include "layEditable.h"
|
||||||
#include "tlException.h"
|
#include "tlException.h"
|
||||||
|
|
||||||
|
|
@ -77,7 +77,7 @@ std::map<std::string, tl::Variant> pcell_parameters_from_string (const std::stri
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
// SelectionIterator implementation
|
// SelectionIterator implementation
|
||||||
|
|
||||||
SelectionIterator::SelectionIterator (lay::LayoutView *view, bool including_transient)
|
SelectionIterator::SelectionIterator (lay::LayoutViewBase *view, bool including_transient)
|
||||||
: m_transient_mode (false)
|
: m_transient_mode (false)
|
||||||
{
|
{
|
||||||
mp_edt_services = view->get_plugins <edt::Service> ();
|
mp_edt_services = view->get_plugins <edt::Service> ();
|
||||||
|
|
@ -145,7 +145,7 @@ SelectionIterator::next ()
|
||||||
// TransformationsVariants implementation
|
// TransformationsVariants implementation
|
||||||
// for a lay::LayoutView
|
// for a lay::LayoutView
|
||||||
|
|
||||||
TransformationVariants::TransformationVariants (const lay::LayoutView *view, bool per_cv_and_layer, bool per_cv)
|
TransformationVariants::TransformationVariants (const lay::LayoutViewBase *view, bool per_cv_and_layer, bool per_cv)
|
||||||
{
|
{
|
||||||
// build the transformation variants cache
|
// build the transformation variants cache
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,6 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <QDialog>
|
|
||||||
|
|
||||||
#include "layObjectInstPath.h"
|
#include "layObjectInstPath.h"
|
||||||
|
|
||||||
#include "dbInstElement.h"
|
#include "dbInstElement.h"
|
||||||
|
|
@ -40,7 +38,7 @@
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
class LayoutView;
|
class LayoutViewBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace edt {
|
namespace edt {
|
||||||
|
|
@ -84,7 +82,7 @@ public:
|
||||||
class TransformationVariants
|
class TransformationVariants
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TransformationVariants (const lay::LayoutView *view, bool per_cv_and_layer = true, bool per_cv = true);
|
TransformationVariants (const lay::LayoutViewBase *view, bool per_cv_and_layer = true, bool per_cv = true);
|
||||||
|
|
||||||
const std::vector<db::DCplxTrans> *per_cv_and_layer (unsigned int cv, unsigned int layer) const;
|
const std::vector<db::DCplxTrans> *per_cv_and_layer (unsigned int cv, unsigned int layer) const;
|
||||||
const std::vector<db::DCplxTrans> *per_cv (unsigned int cv) const;
|
const std::vector<db::DCplxTrans> *per_cv (unsigned int cv) const;
|
||||||
|
|
@ -109,7 +107,7 @@ public:
|
||||||
*
|
*
|
||||||
* If "including_transient" is true, the transient selection will be used as fallback.
|
* If "including_transient" is true, the transient selection will be used as fallback.
|
||||||
*/
|
*/
|
||||||
SelectionIterator (lay::LayoutView *view, bool including_transient = true);
|
SelectionIterator (lay::LayoutViewBase *view, bool including_transient = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns a value indicating whether the transient selection is taken
|
* @brief Returns a value indicating whether the transient selection is taken
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include "edtService.h"
|
#include "edtService.h"
|
||||||
#include "dbRecursiveShapeIterator.h"
|
#include "dbRecursiveShapeIterator.h"
|
||||||
#include "layObjectInstPath.h"
|
#include "layObjectInstPath.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
|
|
||||||
namespace gsi
|
namespace gsi
|
||||||
{
|
{
|
||||||
|
|
@ -489,7 +489,7 @@ private:
|
||||||
|
|
||||||
// extend the layout view by "edtService" specific methods
|
// extend the layout view by "edtService" specific methods
|
||||||
|
|
||||||
static std::vector<edt::Service::objects::value_type> object_selection (const lay::LayoutView *view)
|
static std::vector<edt::Service::objects::value_type> object_selection (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
std::vector<edt::Service::objects::value_type> result;
|
std::vector<edt::Service::objects::value_type> result;
|
||||||
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
||||||
|
|
@ -501,7 +501,7 @@ static std::vector<edt::Service::objects::value_type> object_selection (const la
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_object_selection (const lay::LayoutView *view, const std::vector<edt::Service::objects::value_type> &all_selected)
|
static void set_object_selection (const lay::LayoutViewBase *view, const std::vector<edt::Service::objects::value_type> &all_selected)
|
||||||
{
|
{
|
||||||
std::vector<edt::Service::objects::value_type> sel;
|
std::vector<edt::Service::objects::value_type> sel;
|
||||||
|
|
||||||
|
|
@ -521,7 +521,7 @@ static void set_object_selection (const lay::LayoutView *view, const std::vector
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool has_object_selection (const lay::LayoutView *view)
|
static bool has_object_selection (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
||||||
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
||||||
|
|
@ -532,7 +532,7 @@ static bool has_object_selection (const lay::LayoutView *view)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clear_object_selection (const lay::LayoutView *view)
|
static void clear_object_selection (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
||||||
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
||||||
|
|
@ -540,7 +540,7 @@ static void clear_object_selection (const lay::LayoutView *view)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void select_object (const lay::LayoutView *view, const edt::Service::objects::value_type &object)
|
static void select_object (const lay::LayoutViewBase *view, const edt::Service::objects::value_type &object)
|
||||||
{
|
{
|
||||||
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
||||||
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
||||||
|
|
@ -551,7 +551,7 @@ static void select_object (const lay::LayoutView *view, const edt::Service::obje
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unselect_object (const lay::LayoutView *view, const edt::Service::objects::value_type &object)
|
static void unselect_object (const lay::LayoutViewBase *view, const edt::Service::objects::value_type &object)
|
||||||
{
|
{
|
||||||
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
||||||
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
||||||
|
|
@ -562,7 +562,7 @@ static void unselect_object (const lay::LayoutView *view, const edt::Service::ob
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool has_transient_object_selection (const lay::LayoutView *view)
|
static bool has_transient_object_selection (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
std::vector<edt::Service *> edt_services = view->get_plugins <edt::Service> ();
|
||||||
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
for (std::vector<edt::Service *>::const_iterator s = edt_services.begin (); s != edt_services.end (); ++s) {
|
||||||
|
|
@ -573,18 +573,18 @@ static bool has_transient_object_selection (const lay::LayoutView *view)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static EditableSelectionIterator begin_objects_selected (const lay::LayoutView *view)
|
static EditableSelectionIterator begin_objects_selected (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
return EditableSelectionIterator (view->get_plugins <edt::Service> (), false);
|
return EditableSelectionIterator (view->get_plugins <edt::Service> (), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static EditableSelectionIterator begin_objects_selected_transient (const lay::LayoutView *view)
|
static EditableSelectionIterator begin_objects_selected_transient (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
return EditableSelectionIterator (view->get_plugins <edt::Service> (), true);
|
return EditableSelectionIterator (view->get_plugins <edt::Service> (), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
gsi::ClassExt<lay::LayoutView> layout_view_decl (
|
gsi::ClassExt<lay::LayoutViewBase> layout_view_decl (
|
||||||
gsi::method_ext ("has_object_selection?", &has_object_selection,
|
gsi::method_ext ("has_object_selection?", &has_object_selection,
|
||||||
"@brief Returns true, if geometrical objects (shapes or cell instances) are selected in this view"
|
"@brief Returns true, if geometrical objects (shapes or cell instances) are selected in this view"
|
||||||
) +
|
) +
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ static gsi::Interpreter *ruby_interpreter ()
|
||||||
return interpreter_by_name ("rba");
|
return interpreter_by_name ("rba");
|
||||||
}
|
}
|
||||||
|
|
||||||
Class<Interpreter> decl_Macro ("tl", "Interpreter",
|
Class<Interpreter> decl_Interpreter ("tl", "Interpreter",
|
||||||
gsi::method ("load_file", &Interpreter::load_file, gsi::arg ("path"),
|
gsi::method ("load_file", &Interpreter::load_file, gsi::arg ("path"),
|
||||||
"@brief Loads the given file into the interpreter\n"
|
"@brief Loads the given file into the interpreter\n"
|
||||||
"This will execute the code inside the file.\n"
|
"This will execute the code inside the file.\n"
|
||||||
|
|
|
||||||
|
|
@ -448,7 +448,6 @@ template <typename T> struct type_traits<std::optional<T> > : generic_type_trait
|
||||||
template <> struct type_traits<QString> : generic_type_traits<string_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<QString> : generic_type_traits<string_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<QStringRef> : generic_type_traits<string_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<QStringRef> : generic_type_traits<string_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<QByteArray> : generic_type_traits<byte_array_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<QByteArray> : generic_type_traits<byte_array_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<std::vector<char> > : generic_type_traits<byte_array_tag, StringAdaptor, T_byte_array> { };
|
|
||||||
template <> struct type_traits<QVariant> : generic_type_traits<var_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<QVariant> : generic_type_traits<var_tag, VariantAdaptor, T_var> { };
|
||||||
#if QT_VERSION >= 0x50000
|
#if QT_VERSION >= 0x50000
|
||||||
template <typename T> struct type_traits<QPointer<T> > : generic_type_traits<var_tag, VariantAdaptor, T_var> { };
|
template <typename T> struct type_traits<QPointer<T> > : generic_type_traits<var_tag, VariantAdaptor, T_var> { };
|
||||||
|
|
@ -459,6 +458,7 @@ template <> struct type_traits<QStringView> : generic_type_trait
|
||||||
template <> struct type_traits<QByteArrayView> : generic_type_traits<byte_array_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<QByteArrayView> : generic_type_traits<byte_array_tag, StringAdaptor, T_byte_array> { };
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
template <> struct type_traits<std::vector<char> > : generic_type_traits<byte_array_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<tl::Variant> : generic_type_traits<var_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<tl::Variant> : generic_type_traits<var_tag, VariantAdaptor, T_var> { };
|
||||||
|
|
||||||
template <> struct type_traits<void *> : generic_type_traits<vptr_tag, void *, T_void_ptr> { };
|
template <> struct type_traits<void *> : generic_type_traits<vptr_tag, void *, T_void_ptr> { };
|
||||||
|
|
@ -492,7 +492,6 @@ template <typename T> struct type_traits<const std::optional<T> &> : generic_ty
|
||||||
template <> struct type_traits<const QString &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const QString &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const QStringRef &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const QStringRef &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const QByteArray &> : generic_type_traits<byte_array_cref_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<const QByteArray &> : generic_type_traits<byte_array_cref_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<const std::vector<char> &> : generic_type_traits<byte_array_cref_tag, StringAdaptor, T_byte_array> { };
|
|
||||||
template <> struct type_traits<const QVariant &> : generic_type_traits<var_cref_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<const QVariant &> : generic_type_traits<var_cref_tag, VariantAdaptor, T_var> { };
|
||||||
#if QT_VERSION >= 0x50000
|
#if QT_VERSION >= 0x50000
|
||||||
template <typename T> struct type_traits<const QPointer<T> &> : generic_type_traits<var_cref_tag, VariantAdaptor, T_var> { };
|
template <typename T> struct type_traits<const QPointer<T> &> : generic_type_traits<var_cref_tag, VariantAdaptor, T_var> { };
|
||||||
|
|
@ -503,6 +502,7 @@ template <> struct type_traits<const QStringView &> : generic_type_trait
|
||||||
template <> struct type_traits<const QByteArrayView &> : generic_type_traits<byte_array_cref_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<const QByteArrayView &> : generic_type_traits<byte_array_cref_tag, StringAdaptor, T_byte_array> { };
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
template <> struct type_traits<const std::vector<char> &> : generic_type_traits<byte_array_cref_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<const tl::Variant &> : generic_type_traits<var_cref_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<const tl::Variant &> : generic_type_traits<var_cref_tag, VariantAdaptor, T_var> { };
|
||||||
template <> struct type_traits<const char * const &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const char * const &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const unsigned char * const &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const unsigned char * const &> : generic_type_traits<string_cref_tag, StringAdaptor, T_string> { };
|
||||||
|
|
@ -533,7 +533,6 @@ template <typename T> struct type_traits<std::optional<T> &> : generic_type_tra
|
||||||
template <> struct type_traits<QString &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<QString &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<QStringRef &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<QStringRef &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<QByteArray &> : generic_type_traits<byte_array_ref_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<QByteArray &> : generic_type_traits<byte_array_ref_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<std::vector<char> &> : generic_type_traits<byte_array_ref_tag, StringAdaptor, T_byte_array> { };
|
|
||||||
template <> struct type_traits<QVariant &> : generic_type_traits<var_ref_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<QVariant &> : generic_type_traits<var_ref_tag, VariantAdaptor, T_var> { };
|
||||||
#if QT_VERSION >= 0x50000
|
#if QT_VERSION >= 0x50000
|
||||||
template <typename T> struct type_traits<QPointer<T> &> : generic_type_traits<var_ref_tag, VariantAdaptor, T_var> { };
|
template <typename T> struct type_traits<QPointer<T> &> : generic_type_traits<var_ref_tag, VariantAdaptor, T_var> { };
|
||||||
|
|
@ -544,6 +543,7 @@ template <> struct type_traits<QStringView &> : generic_type_trait
|
||||||
template <> struct type_traits<QByteArrayView &> : generic_type_traits<byte_array_ref_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<QByteArrayView &> : generic_type_traits<byte_array_ref_tag, StringAdaptor, T_byte_array> { };
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
template <> struct type_traits<std::vector<char> &> : generic_type_traits<byte_array_ref_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<tl::Variant &> : generic_type_traits<var_ref_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<tl::Variant &> : generic_type_traits<var_ref_tag, VariantAdaptor, T_var> { };
|
||||||
template <> struct type_traits<const char * &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const char * &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const unsigned char * &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const unsigned char * &> : generic_type_traits<string_ref_tag, StringAdaptor, T_string> { };
|
||||||
|
|
@ -575,7 +575,6 @@ template <typename T> struct type_traits<const std::optional<T> *> : generic_ty
|
||||||
template <> struct type_traits<const QString *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const QString *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const QStringRef *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const QStringRef *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const QByteArray *> : generic_type_traits<byte_array_cptr_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<const QByteArray *> : generic_type_traits<byte_array_cptr_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<const std::vector<char> *> : generic_type_traits<byte_array_cptr_tag, StringAdaptor, T_byte_array> { };
|
|
||||||
template <> struct type_traits<const QVariant *> : generic_type_traits<var_cptr_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<const QVariant *> : generic_type_traits<var_cptr_tag, VariantAdaptor, T_var> { };
|
||||||
#if QT_VERSION >= 0x50000
|
#if QT_VERSION >= 0x50000
|
||||||
template <typename T> struct type_traits<const QPointer<T> *> : generic_type_traits<var_cptr_tag, VariantAdaptor, T_var> { };
|
template <typename T> struct type_traits<const QPointer<T> *> : generic_type_traits<var_cptr_tag, VariantAdaptor, T_var> { };
|
||||||
|
|
@ -586,6 +585,7 @@ template <> struct type_traits<const QStringView *> : generic_type_trait
|
||||||
template <> struct type_traits<const QByteArrayView *> : generic_type_traits<byte_array_cptr_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<const QByteArrayView *> : generic_type_traits<byte_array_cptr_tag, StringAdaptor, T_byte_array> { };
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
template <> struct type_traits<const std::vector<char> *> : generic_type_traits<byte_array_cptr_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<const tl::Variant *> : generic_type_traits<var_cptr_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<const tl::Variant *> : generic_type_traits<var_cptr_tag, VariantAdaptor, T_var> { };
|
||||||
template <> struct type_traits<const char * const *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const char * const *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const unsigned char * const *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const unsigned char * const *> : generic_type_traits<string_cptr_tag, StringAdaptor, T_string> { };
|
||||||
|
|
@ -617,7 +617,6 @@ template <typename T> struct type_traits<std::optional<T> *> : generic_type_t
|
||||||
template <> struct type_traits<QString *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<QString *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<QStringRef *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<QStringRef *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<QByteArray *> : generic_type_traits<byte_array_ptr_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<QByteArray *> : generic_type_traits<byte_array_ptr_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<std::vector<char> *> : generic_type_traits<byte_array_ptr_tag, StringAdaptor, T_byte_array> { };
|
|
||||||
template <> struct type_traits<QVariant *> : generic_type_traits<var_ptr_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<QVariant *> : generic_type_traits<var_ptr_tag, VariantAdaptor, T_var> { };
|
||||||
#if QT_VERSION >= 0x50000
|
#if QT_VERSION >= 0x50000
|
||||||
template <typename T> struct type_traits<QPointer<T> *> : generic_type_traits<var_ptr_tag, VariantAdaptor, T_var> { };
|
template <typename T> struct type_traits<QPointer<T> *> : generic_type_traits<var_ptr_tag, VariantAdaptor, T_var> { };
|
||||||
|
|
@ -628,6 +627,7 @@ template <> struct type_traits<QStringView *> : generic_type_trait
|
||||||
template <> struct type_traits<QByteArrayView *> : generic_type_traits<byte_array_ptr_tag, StringAdaptor, T_byte_array> { };
|
template <> struct type_traits<QByteArrayView *> : generic_type_traits<byte_array_ptr_tag, StringAdaptor, T_byte_array> { };
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
template <> struct type_traits<std::vector<char> *> : generic_type_traits<byte_array_ptr_tag, StringAdaptor, T_byte_array> { };
|
||||||
template <> struct type_traits<tl::Variant *> : generic_type_traits<var_ptr_tag, VariantAdaptor, T_var> { };
|
template <> struct type_traits<tl::Variant *> : generic_type_traits<var_ptr_tag, VariantAdaptor, T_var> { };
|
||||||
template <> struct type_traits<const char * *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const char * *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
||||||
template <> struct type_traits<const unsigned char * *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
template <> struct type_traits<const unsigned char * *> : generic_type_traits<string_ptr_tag, StringAdaptor, T_string> { };
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
#include "imgService.h"
|
#include "imgService.h"
|
||||||
#include "imgStream.h"
|
#include "imgStream.h"
|
||||||
#include "dbTilingProcessor.h"
|
#include "dbTilingProcessor.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
|
|
||||||
namespace gsi
|
namespace gsi
|
||||||
{
|
{
|
||||||
|
|
@ -45,12 +45,12 @@ static void clear_colormap (img::DataMapping *dm)
|
||||||
|
|
||||||
static void add_colormap (img::DataMapping *dm, double value, lay::color_t color)
|
static void add_colormap (img::DataMapping *dm, double value, lay::color_t color)
|
||||||
{
|
{
|
||||||
dm->false_color_nodes.push_back (std::make_pair (value, std::make_pair (QColor (color), QColor (color))));
|
dm->false_color_nodes.push_back (std::make_pair (value, std::make_pair (lay::Color (color), lay::Color (color))));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_colormap2 (img::DataMapping *dm, double value, lay::color_t lcolor, lay::color_t rcolor)
|
static void add_colormap2 (img::DataMapping *dm, double value, lay::color_t lcolor, lay::color_t rcolor)
|
||||||
{
|
{
|
||||||
dm->false_color_nodes.push_back (std::make_pair (value, std::make_pair (QColor (lcolor), QColor (rcolor))));
|
dm->false_color_nodes.push_back (std::make_pair (value, std::make_pair (lay::Color (lcolor), lay::Color (rcolor))));
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t num_colormap_entries (const img::DataMapping *dm)
|
static size_t num_colormap_entries (const img::DataMapping *dm)
|
||||||
|
|
@ -299,8 +299,8 @@ gsi::Class<img::DataMapping> decl_ImageDataMapping ("lay", "ImageDataMapping",
|
||||||
|
|
||||||
class ImageRef;
|
class ImageRef;
|
||||||
|
|
||||||
static void replace_image (lay::LayoutView *view, size_t id, ImageRef &new_obj);
|
static void replace_image_base (lay::LayoutViewBase *view, size_t id, ImageRef &new_obj);
|
||||||
static void erase_image (lay::LayoutView *view, size_t id);
|
static void erase_image_base (lay::LayoutViewBase *view, size_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief An extension of the img::Object that provides "live" updates of the view
|
* @brief An extension of the img::Object that provides "live" updates of the view
|
||||||
|
|
@ -321,7 +321,7 @@ public:
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageRef (const img::Object &other, lay::LayoutView *view)
|
ImageRef (const img::Object &other, lay::LayoutViewBase *view)
|
||||||
: img::Object (other), mp_view (view), dm_update_view (this, &ImageRef::do_update_view)
|
: img::Object (other), mp_view (view), dm_update_view (this, &ImageRef::do_update_view)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
|
|
@ -365,7 +365,7 @@ public:
|
||||||
void erase ()
|
void erase ()
|
||||||
{
|
{
|
||||||
if (mp_view) {
|
if (mp_view) {
|
||||||
erase_image (mp_view.get (), id ());
|
erase_image_base (mp_view.get (), id ());
|
||||||
detach ();
|
detach ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -373,10 +373,10 @@ public:
|
||||||
template <class T>
|
template <class T>
|
||||||
ImageRef transformed (const T &t) const
|
ImageRef transformed (const T &t) const
|
||||||
{
|
{
|
||||||
return ImageRef (img::Object::transformed<T> (t), const_cast<lay::LayoutView *> (mp_view.get ()));
|
return ImageRef (img::Object::transformed<T> (t), const_cast<lay::LayoutViewBase *> (mp_view.get ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_view (lay::LayoutView *view)
|
void set_view (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
mp_view.reset (view);
|
mp_view.reset (view);
|
||||||
}
|
}
|
||||||
|
|
@ -398,12 +398,12 @@ protected:
|
||||||
void do_update_view ()
|
void do_update_view ()
|
||||||
{
|
{
|
||||||
if (mp_view) {
|
if (mp_view) {
|
||||||
replace_image (mp_view.get (), id (), *this);
|
replace_image_base (mp_view.get (), id (), *this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
tl::weak_ptr<lay::LayoutView> mp_view;
|
tl::weak_ptr<lay::LayoutViewBase> mp_view;
|
||||||
tl::DeferredMethod<ImageRef> dm_update_view;
|
tl::DeferredMethod<ImageRef> dm_update_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1073,7 +1073,7 @@ public:
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageRefIterator (const img::ImageIterator &iter, lay::LayoutView *view)
|
ImageRefIterator (const img::ImageIterator &iter, lay::LayoutViewBase *view)
|
||||||
: img::ImageIterator (iter), mp_view (view)
|
: img::ImageIterator (iter), mp_view (view)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
|
|
@ -1081,14 +1081,14 @@ public:
|
||||||
|
|
||||||
reference operator* () const
|
reference operator* () const
|
||||||
{
|
{
|
||||||
return reference (img::ImageIterator::operator* (), const_cast<lay::LayoutView * >(mp_view.get ()));
|
return reference (img::ImageIterator::operator* (), const_cast<lay::LayoutViewBase * >(mp_view.get ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
tl::weak_ptr<lay::LayoutView> mp_view;
|
tl::weak_ptr<lay::LayoutViewBase> mp_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void clear_images (lay::LayoutView *view)
|
static void clear_images (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
if (img_service) {
|
if (img_service) {
|
||||||
|
|
@ -1096,14 +1096,14 @@ static void clear_images (lay::LayoutView *view)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_image (lay::LayoutView *view, size_t id, bool visible)
|
static void show_image (lay::LayoutViewBase *view, size_t id, bool visible)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
if (img_service) {
|
if (img_service) {
|
||||||
|
|
||||||
const img::Object *img = img_service->object_by_id (id);
|
const img::Object *img = img_service->object_by_id (id);
|
||||||
if (img == 0) {
|
if (img == 0) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The image Id is not valid")));
|
throw tl::Exception (tl::to_string (tr ("The image Id is not valid")));
|
||||||
}
|
}
|
||||||
|
|
||||||
img::Object new_img (*img);
|
img::Object new_img (*img);
|
||||||
|
|
@ -1114,14 +1114,14 @@ static void show_image (lay::LayoutView *view, size_t id, bool visible)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void replace_image (lay::LayoutView *view, size_t id, ImageRef &new_obj)
|
void replace_image_base (lay::LayoutViewBase *view, size_t id, ImageRef &new_obj)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
if (img_service) {
|
if (img_service) {
|
||||||
|
|
||||||
const img::Object *img = img_service->object_by_id (id);
|
const img::Object *img = img_service->object_by_id (id);
|
||||||
if (img == 0) {
|
if (img == 0) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The image Id is not valid")));
|
throw tl::Exception (tl::to_string (tr ("The image Id is not valid")));
|
||||||
}
|
}
|
||||||
|
|
||||||
img_service->change_image_by_id (id, new_obj);
|
img_service->change_image_by_id (id, new_obj);
|
||||||
|
|
@ -1129,14 +1129,19 @@ static void replace_image (lay::LayoutView *view, size_t id, ImageRef &new_obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void erase_image (lay::LayoutView *view, size_t id)
|
static void replace_image (lay::LayoutViewBase *view, size_t id, ImageRef &new_obj)
|
||||||
|
{
|
||||||
|
replace_image_base (view, id, new_obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
void erase_image_base (lay::LayoutViewBase *view, size_t id)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
if (img_service) {
|
if (img_service) {
|
||||||
|
|
||||||
const img::Object *img = img_service->object_by_id (id);
|
const img::Object *img = img_service->object_by_id (id);
|
||||||
if (img == 0) {
|
if (img == 0) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The image Id is not valid")));
|
throw tl::Exception (tl::to_string (tr ("The image Id is not valid")));
|
||||||
}
|
}
|
||||||
|
|
||||||
img_service->erase_image_by_id (id);
|
img_service->erase_image_by_id (id);
|
||||||
|
|
@ -1144,10 +1149,15 @@ static void erase_image (lay::LayoutView *view, size_t id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void insert_image (lay::LayoutView *view, ImageRef &obj)
|
static void erase_image (lay::LayoutViewBase *view, size_t id)
|
||||||
|
{
|
||||||
|
erase_image_base (view, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void insert_image (lay::LayoutViewBase *view, ImageRef &obj)
|
||||||
{
|
{
|
||||||
if (obj.is_valid ()) {
|
if (obj.is_valid ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
throw tl::Exception (tl::to_string (tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
||||||
}
|
}
|
||||||
|
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
|
|
@ -1158,7 +1168,7 @@ static void insert_image (lay::LayoutView *view, ImageRef &obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImageRef get_image (lay::LayoutView *view, size_t id)
|
static ImageRef get_image (lay::LayoutViewBase *view, size_t id)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
if (img_service) {
|
if (img_service) {
|
||||||
|
|
@ -1171,28 +1181,28 @@ static ImageRef get_image (lay::LayoutView *view, size_t id)
|
||||||
return ImageRef ();
|
return ImageRef ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static tl::Event &get_images_changed_event (lay::LayoutView *view)
|
static tl::Event &get_images_changed_event (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
tl_assert (img_service != 0);
|
tl_assert (img_service != 0);
|
||||||
return img_service->images_changed_event;
|
return img_service->images_changed_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
static tl::Event &get_image_selection_changed_event (lay::LayoutView *view)
|
static tl::Event &get_image_selection_changed_event (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
tl_assert (img_service != 0);
|
tl_assert (img_service != 0);
|
||||||
return img_service->image_selection_changed_event;
|
return img_service->image_selection_changed_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
static tl::event<int> &get_image_changed_event (lay::LayoutView *view)
|
static tl::event<int> &get_image_changed_event (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
tl_assert (img_service != 0);
|
tl_assert (img_service != 0);
|
||||||
return img_service->image_changed_event;
|
return img_service->image_changed_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImageRefIterator begin_images (lay::LayoutView *view)
|
static ImageRefIterator begin_images (lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||||
if (img_service) {
|
if (img_service) {
|
||||||
|
|
@ -1203,7 +1213,7 @@ static ImageRefIterator begin_images (lay::LayoutView *view)
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
gsi::ClassExt<lay::LayoutView> layout_view_decl (
|
gsi::ClassExt<lay::LayoutViewBase> layout_view_decl (
|
||||||
gsi::method_ext ("clear_images", &gsi::clear_images,
|
gsi::method_ext ("clear_images", &gsi::clear_images,
|
||||||
"@brief Clear all images on this view"
|
"@brief Clear all images on this view"
|
||||||
) +
|
) +
|
||||||
|
|
@ -1332,7 +1342,7 @@ private:
|
||||||
|
|
||||||
// extend the layout view by "edtService" specific methods
|
// extend the layout view by "edtService" specific methods
|
||||||
|
|
||||||
static bool has_image_selection (const lay::LayoutView *view)
|
static bool has_image_selection (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
std::vector<img::Service *> img = view->get_plugins <img::Service> ();
|
std::vector<img::Service *> img = view->get_plugins <img::Service> ();
|
||||||
for (std::vector<img::Service *>::const_iterator s = img.begin (); s != img.end (); ++s) {
|
for (std::vector<img::Service *>::const_iterator s = img.begin (); s != img.end (); ++s) {
|
||||||
|
|
@ -1343,14 +1353,14 @@ static bool has_image_selection (const lay::LayoutView *view)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SelectionIterator begin_images_selected (const lay::LayoutView *view)
|
static SelectionIterator begin_images_selected (const lay::LayoutViewBase *view)
|
||||||
{
|
{
|
||||||
return SelectionIterator (view->get_plugins <img::Service> ());
|
return SelectionIterator (view->get_plugins <img::Service> ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
gsi::ClassExt<lay::LayoutView> layout_view_decl2 (
|
gsi::ClassExt<lay::LayoutViewBase> layout_view_decl2 (
|
||||||
gsi::method_ext ("has_image_selection?", &has_image_selection,
|
gsi::method_ext ("has_image_selection?", &has_image_selection,
|
||||||
"@brief Returns true, if images are selected in this view"
|
"@brief Returns true, if images are selected in this view"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
|
||||||
|
|
@ -6,36 +6,56 @@ include($$PWD/../../lib.pri)
|
||||||
|
|
||||||
DEFINES += MAKE_IMG_LIBRARY
|
DEFINES += MAKE_IMG_LIBRARY
|
||||||
|
|
||||||
HEADERS = \
|
!equals(HAVE_QT, "0") {
|
||||||
imgLandmarksDialog.h \
|
|
||||||
imgNavigator.h \
|
|
||||||
imgObject.h \
|
|
||||||
imgPlugin.h \
|
|
||||||
imgPropertiesPage.h \
|
|
||||||
imgService.h \
|
|
||||||
imgWidgets.h \
|
|
||||||
imgForceLink.h \
|
|
||||||
imgCommon.h \
|
|
||||||
imgStream.h
|
|
||||||
|
|
||||||
FORMS = \
|
FORMS = \
|
||||||
AddNewImageDialog.ui \
|
AddNewImageDialog.ui \
|
||||||
ImageLandmarksDialog.ui \
|
ImageLandmarksDialog.ui \
|
||||||
ImagePropertiesPage.ui \
|
ImagePropertiesPage.ui \
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disabled without Qt:
|
||||||
|
|
||||||
|
HEADERS = \
|
||||||
|
imgLandmarksDialog.h \
|
||||||
|
imgNavigator.h \
|
||||||
|
imgPropertiesPage.h \
|
||||||
|
imgWidgets.h \
|
||||||
|
|
||||||
SOURCES = \
|
SOURCES = \
|
||||||
gsiDeclImg.cc \
|
|
||||||
imgLandmarksDialog.cc \
|
imgLandmarksDialog.cc \
|
||||||
imgNavigator.cc \
|
imgNavigator.cc \
|
||||||
|
imgPropertiesPage.cc \
|
||||||
|
imgWidgets.cc \
|
||||||
|
|
||||||
|
# Enabled without Qt:
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
imgObject.h \
|
||||||
|
imgPlugin.h \
|
||||||
|
imgService.h \
|
||||||
|
imgForceLink.h \
|
||||||
|
imgCommon.h \
|
||||||
|
imgStream.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
gsiDeclImg.cc \
|
||||||
imgObject.cc \
|
imgObject.cc \
|
||||||
imgPlugin.cc \
|
imgPlugin.cc \
|
||||||
imgPropertiesPage.cc \
|
|
||||||
imgService.cc \
|
imgService.cc \
|
||||||
imgWidgets.cc \
|
|
||||||
imgForceLink.cc \
|
imgForceLink.cc \
|
||||||
imgStream.cc
|
imgStream.cc
|
||||||
|
|
||||||
INCLUDEPATH += $$TL_INC $$DB_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
INCLUDEPATH += $$TL_INC $$DB_INC $$GSI_INC $$LAYBASIC_INC $$LAYVIEW_INC $$DB_INC
|
||||||
DEPENDPATH += $$TL_INC $$DB_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
DEPENDPATH += $$TL_INC $$DB_INC $$GSI_INC $$LAYBASIC_INC $$LAYVIEW_INC $$DB_INC
|
||||||
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_db -lklayout_gsi -lklayout_laybasic -lklayout_db
|
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_db -lklayout_gsi -lklayout_laybasic -lklayout_layview -lklayout_db
|
||||||
|
|
||||||
|
!equals(HAVE_QT, "0") {
|
||||||
|
|
||||||
|
INCLUDEPATH += $$LAYUI_INC
|
||||||
|
DEPENDPATH += $$LAYUI_INC
|
||||||
|
|
||||||
|
LIBS += -lklayout_layui
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warrimgy of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "imgForceLink.h"
|
#include "imgForceLink.h"
|
||||||
|
|
||||||
namespace img
|
namespace img
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warrimgy of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
namespace img
|
namespace img
|
||||||
{
|
{
|
||||||
IMG_PUBLIC int _force_link_f ();
|
IMG_PUBLIC int _force_link_f ();
|
||||||
int _force_link_target = _force_link_f ();
|
static int _force_link_target = _force_link_f ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "imgLandmarksDialog.h"
|
#include "imgLandmarksDialog.h"
|
||||||
#include "imgService.h"
|
#include "imgService.h"
|
||||||
|
|
@ -144,7 +145,7 @@ class LandmarkEditorService
|
||||||
: public lay::ViewService
|
: public lay::ViewService
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LandmarkEditorService (lay::LayoutView *view, img::Object *img)
|
LandmarkEditorService (lay::LayoutViewBase *view, img::Object *img)
|
||||||
: lay::ViewService (view->view_object_widget ()),
|
: lay::ViewService (view->view_object_widget ()),
|
||||||
mp_image (img), m_selected (-1), m_dragging (false),
|
mp_image (img), m_selected (-1), m_dragging (false),
|
||||||
m_mode (LandmarksDialog::None)
|
m_mode (LandmarksDialog::None)
|
||||||
|
|
@ -345,7 +346,7 @@ public:
|
||||||
widget ()->ungrab_mouse (this);
|
widget ()->ungrab_mouse (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_colors (QColor /*background*/, QColor /*color*/)
|
void set_colors (lay::Color /*background*/, lay::Color /*color*/)
|
||||||
{
|
{
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
|
|
@ -499,3 +500,4 @@ LandmarksDialog::landmarks_updated ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_imgLandmarksDialog
|
#ifndef HDR_imgLandmarksDialog
|
||||||
#define HDR_imgLandmarksDialog
|
#define HDR_imgLandmarksDialog
|
||||||
|
|
@ -65,3 +66,5 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "laybasicConfig.h"
|
#include "laybasicConfig.h"
|
||||||
#include "layMarker.h"
|
#include "layMarker.h"
|
||||||
|
|
@ -113,3 +114,4 @@ Navigator::background_color (QColor c)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_imgNavigator
|
#ifndef HDR_imgNavigator
|
||||||
#define HDR_imgNavigator
|
#define HDR_imgNavigator
|
||||||
|
|
@ -70,3 +71,4 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -22,15 +22,16 @@
|
||||||
|
|
||||||
|
|
||||||
#include "imgObject.h"
|
#include "imgObject.h"
|
||||||
#include "imgWidgets.h" // for interpolate_color()
|
|
||||||
#include "imgStream.h"
|
#include "imgStream.h"
|
||||||
#include "tlLog.h"
|
#include "tlLog.h"
|
||||||
#include "tlTimer.h"
|
#include "tlTimer.h"
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
#include "layConverters.h"
|
#include "layConverters.h"
|
||||||
|
#include "layPixelBuffer.h"
|
||||||
#include "dbPolygonTools.h"
|
#include "dbPolygonTools.h"
|
||||||
#include "tlFileUtils.h"
|
#include "tlFileUtils.h"
|
||||||
#include "tlUri.h"
|
#include "tlUri.h"
|
||||||
|
#include "tlThreads.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
@ -39,8 +40,9 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
|
|
||||||
#include <QImage>
|
#if defined(HAVE_QT)
|
||||||
#include <QMutex>
|
# include <QImage>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace img
|
namespace img
|
||||||
{
|
{
|
||||||
|
|
@ -51,8 +53,8 @@ namespace img
|
||||||
DataMapping::DataMapping ()
|
DataMapping::DataMapping ()
|
||||||
: brightness (0.0), contrast (0.0), gamma (1.0), red_gain (1.0), green_gain (1.0), blue_gain (1.0)
|
: brightness (0.0), contrast (0.0), gamma (1.0), red_gain (1.0), green_gain (1.0), blue_gain (1.0)
|
||||||
{
|
{
|
||||||
false_color_nodes.push_back (std::make_pair (0.0, std::make_pair (QColor (0, 0, 0), QColor (0, 0, 0))));
|
false_color_nodes.push_back (std::make_pair (0.0, std::make_pair (lay::Color (0, 0, 0), lay::Color (0, 0, 0))));
|
||||||
false_color_nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (255, 255, 255), QColor (255, 255, 255))));
|
false_color_nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (255, 255, 255), lay::Color (255, 255, 255))));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
@ -192,21 +194,25 @@ DataMapping::create_data_mapping (bool monochrome, double xmin, double xmax, uns
|
||||||
|
|
||||||
for (unsigned int i = 1; i < false_color_nodes.size (); ++i) {
|
for (unsigned int i = 1; i < false_color_nodes.size (); ++i) {
|
||||||
|
|
||||||
int h1, s1, v1;
|
unsigned int h1, s1, v1;
|
||||||
false_color_nodes [i - 1].second.second.getHsv (&h1, &s1, &v1);
|
false_color_nodes [i - 1].second.second.get_hsv (h1, s1, v1);
|
||||||
|
|
||||||
int h2, s2, v2;
|
unsigned int h2, s2, v2;
|
||||||
false_color_nodes [i].second.first.getHsv (&h2, &s2, &v2);
|
false_color_nodes [i].second.first.get_hsv (h2, s2, v2);
|
||||||
|
|
||||||
|
int dh = int (h1) - int (h2);
|
||||||
|
int ds = int (s1) - int (s2);
|
||||||
|
int dv = int (v1) - int (v2);
|
||||||
|
|
||||||
// The number of steps is chosen such that the full HSV band divides into approximately 200 steps
|
// The number of steps is chosen such that the full HSV band divides into approximately 200 steps
|
||||||
double nsteps = 0.5 * sqrt (double (h1 - h2) * double (h1 - h2) + double (s1 - s2) * double (s1 - s2) + double (v1 - v2) * double (v1 - v2));
|
double nsteps = 0.5 * sqrt (double (dh * dh) + double (ds * ds) + double (dv * dv));
|
||||||
int n = int (floor (nsteps + 1.0));
|
int n = int (floor (nsteps + 1.0));
|
||||||
double dx = (false_color_nodes [i].first - false_color_nodes [i - 1].first) / n;
|
double dx = (false_color_nodes [i].first - false_color_nodes [i - 1].first) / n;
|
||||||
double x = false_color_nodes [i - 1].first;
|
double x = false_color_nodes [i - 1].first;
|
||||||
|
|
||||||
for (int j = 0; j < n; ++j) {
|
for (int j = 0; j < n; ++j) {
|
||||||
|
|
||||||
QColor c = interpolated_color (false_color_nodes, x);
|
lay::Color c = interpolated_color (false_color_nodes, x);
|
||||||
|
|
||||||
double y = 0.0;
|
double y = 0.0;
|
||||||
if (channel == 0) {
|
if (channel == 0) {
|
||||||
|
|
@ -260,6 +266,57 @@ DataMapping::create_data_mapping (bool monochrome, double xmin, double xmax, uns
|
||||||
return dm;
|
return dm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
struct compare_first_of_node
|
||||||
|
{
|
||||||
|
bool operator() (const std::pair <double, std::pair<lay::Color, lay::Color> > &a, const std::pair <double, std::pair<lay::Color, lay::Color> > &b) const
|
||||||
|
{
|
||||||
|
return a.first < b.first;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
lay::Color
|
||||||
|
interpolated_color (const DataMapping::false_color_nodes_type &nodes, double x)
|
||||||
|
{
|
||||||
|
if (nodes.size () < 1) {
|
||||||
|
return lay::Color ();
|
||||||
|
} else if (nodes.size () < 2) {
|
||||||
|
return x < nodes[0].first ? nodes[0].second.first : nodes[0].second.second;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
std::vector<std::pair<double, std::pair<lay::Color, lay::Color> > >::const_iterator p = std::lower_bound (nodes.begin (), nodes.end (), std::make_pair (x, std::make_pair (lay::Color (), lay::Color ())), compare_first_of_node ());
|
||||||
|
if (p == nodes.end ()) {
|
||||||
|
return nodes.back ().second.second;
|
||||||
|
} else if (p == nodes.begin ()) {
|
||||||
|
return nodes.front ().second.first;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
double x1 = p[-1].first;
|
||||||
|
double x2 = p->first;
|
||||||
|
|
||||||
|
unsigned int h1 = 0, s1 = 0, v1 = 0;
|
||||||
|
p[-1].second.second.get_hsv (h1, s1, v1);
|
||||||
|
|
||||||
|
unsigned int h2 = 0, s2 = 0, v2 = 0;
|
||||||
|
p->second.first.get_hsv (h2, s2, v2);
|
||||||
|
|
||||||
|
int h = int (0.5 + h1 + double(x - x1) * double (int (h2) - int (h1)) / double(x2 - x1));
|
||||||
|
int s = int (0.5 + s1 + double(x - x1) * double (int (s2) - int (s1)) / double(x2 - x1));
|
||||||
|
int v = int (0.5 + v1 + double(x - x1) * double (int (v2) - int (v1)) / double(x2 - x1));
|
||||||
|
|
||||||
|
return lay::Color::from_hsv ((unsigned int) h, (unsigned int) s, (unsigned int) v);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
// img::DataHeader definition and implementation
|
// img::DataHeader definition and implementation
|
||||||
|
|
||||||
|
|
@ -690,7 +747,7 @@ private:
|
||||||
|
|
||||||
static size_t make_id ()
|
static size_t make_id ()
|
||||||
{
|
{
|
||||||
static QMutex id_lock;
|
static tl::Mutex id_lock;
|
||||||
static size_t s_id_counter = 1;
|
static size_t s_id_counter = 1;
|
||||||
|
|
||||||
// Get a new Id for the object. Id == 0 is reserved.
|
// Get a new Id for the object. Id == 0 is reserved.
|
||||||
|
|
@ -1283,7 +1340,7 @@ Object::from_string (const char *str, const char *base_dir)
|
||||||
|
|
||||||
double x = 0.0;
|
double x = 0.0;
|
||||||
lay::ColorConverter cc;
|
lay::ColorConverter cc;
|
||||||
QColor cl, cr;
|
lay::Color cl, cr;
|
||||||
std::string s;
|
std::string s;
|
||||||
|
|
||||||
m_data_mapping.false_color_nodes.clear ();
|
m_data_mapping.false_color_nodes.clear ();
|
||||||
|
|
@ -1506,6 +1563,8 @@ Object::read_file ()
|
||||||
// continue with other formats ...
|
// continue with other formats ...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
QImage qimage (tl::to_qstring (m_filename));
|
QImage qimage (tl::to_qstring (m_filename));
|
||||||
|
|
||||||
if (! qimage.isNull ()) {
|
if (! qimage.isNull ()) {
|
||||||
|
|
@ -1566,6 +1625,85 @@ Object::read_file ()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(HAVE_PNG)
|
||||||
|
|
||||||
|
lay::PixelBuffer img;
|
||||||
|
|
||||||
|
{
|
||||||
|
tl::InputStream stream (m_filename);
|
||||||
|
img = lay::PixelBuffer::read_png (stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_color = false;
|
||||||
|
for (unsigned int i = 0; i < img.height () && ! is_color; ++i) {
|
||||||
|
const lay::color_t *d = img.scan_line (i);
|
||||||
|
const lay::color_t *dd = d + img.width ();
|
||||||
|
while (! is_color && d != dd) {
|
||||||
|
lay::color_t c = *d++;
|
||||||
|
is_color = (((c >> 8) ^ c) & 0xffff) != 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! m_min_value_set) {
|
||||||
|
m_min_value = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! m_max_value_set) {
|
||||||
|
m_max_value = 255.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_min_value_set = true;
|
||||||
|
m_max_value_set = true;
|
||||||
|
|
||||||
|
unsigned int w = img.width (), h = img.height ();
|
||||||
|
|
||||||
|
mp_data = new DataHeader (w, h, is_color, true);
|
||||||
|
mp_data->add_ref ();
|
||||||
|
|
||||||
|
if (is_color) {
|
||||||
|
|
||||||
|
unsigned char *red = mp_data->byte_data (0);
|
||||||
|
unsigned char *green = mp_data->byte_data (1);
|
||||||
|
unsigned char *blue = mp_data->byte_data (2);
|
||||||
|
unsigned char *msk = img.transparent () ? mp_data->set_mask () : 0;
|
||||||
|
|
||||||
|
for (unsigned int y = 0; y < h; ++y) {
|
||||||
|
const lay::color_t *d = img.scan_line (h - y - 1);
|
||||||
|
const lay::color_t *dd = d + img.width ();
|
||||||
|
while (d != dd) {
|
||||||
|
lay::color_t rgb = *d++;
|
||||||
|
*red++ = lay::red (rgb);
|
||||||
|
*green++ = lay::green (rgb);
|
||||||
|
*blue++ = lay::blue (rgb);
|
||||||
|
if (msk) {
|
||||||
|
*msk++ = lay::alpha (rgb) > 128;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
unsigned char *mono = mp_data->byte_data ();
|
||||||
|
unsigned char *msk = img.transparent () ? mp_data->set_mask () : 0;
|
||||||
|
|
||||||
|
for (unsigned int y = 0; y < h; ++y) {
|
||||||
|
const lay::color_t *d = img.scan_line (h - y - 1);
|
||||||
|
const lay::color_t *dd = d + img.width ();
|
||||||
|
while (d != dd) {
|
||||||
|
lay::color_t rgb = *d++;
|
||||||
|
*mono++ = lay::green (rgb);
|
||||||
|
if (msk) {
|
||||||
|
*msk++ = lay::alpha (rgb) > 128;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
throw tl::Exception (tl::to_string ("No PNG support compiled in - cannot load PNG files"));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1654,7 +1792,7 @@ Object::to_string () const
|
||||||
for (unsigned int i = 0; i < data_mapping ().false_color_nodes.size (); ++i) {
|
for (unsigned int i = 0; i < data_mapping ().false_color_nodes.size (); ++i) {
|
||||||
os << data_mapping ().false_color_nodes[i].first;
|
os << data_mapping ().false_color_nodes[i].first;
|
||||||
os << ",";
|
os << ",";
|
||||||
const std::pair<QColor, QColor> &clr = data_mapping ().false_color_nodes[i].second;
|
const std::pair<lay::Color, lay::Color> &clr = data_mapping ().false_color_nodes[i].second;
|
||||||
os << tl::to_word_or_quoted_string (cc.to_string (clr.first));
|
os << tl::to_word_or_quoted_string (cc.to_string (clr.first));
|
||||||
if (clr.first != clr.second) {
|
if (clr.first != clr.second) {
|
||||||
os << ",";
|
os << ",";
|
||||||
|
|
|
||||||
|
|
@ -33,13 +33,11 @@
|
||||||
#include "dbMatrix.h"
|
#include "dbMatrix.h"
|
||||||
#include "dbPolygon.h"
|
#include "dbPolygon.h"
|
||||||
#include "tlDataMapping.h"
|
#include "tlDataMapping.h"
|
||||||
#include "layViewOp.h"
|
#include "layColor.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <QColor>
|
|
||||||
|
|
||||||
namespace img {
|
namespace img {
|
||||||
|
|
||||||
class DataHeader;
|
class DataHeader;
|
||||||
|
|
@ -52,7 +50,7 @@ class DataHeader;
|
||||||
struct IMG_PUBLIC DataMapping
|
struct IMG_PUBLIC DataMapping
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::vector< std::pair<double, std::pair<QColor, QColor> > > false_color_nodes_type;
|
typedef std::vector< std::pair<double, std::pair<lay::Color, lay::Color> > > false_color_nodes_type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The constructor
|
* @brief The constructor
|
||||||
|
|
@ -139,6 +137,11 @@ public:
|
||||||
tl::DataMappingBase *create_data_mapping (bool monochrome, double xmin, double xmax, unsigned int channel) const;
|
tl::DataMappingBase *create_data_mapping (bool monochrome, double xmin, double xmax, unsigned int channel) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A helper function to interpolate a color in the color bar at a given x
|
||||||
|
*/
|
||||||
|
lay::Color interpolated_color (const DataMapping::false_color_nodes_type &nodes, double x);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A image object
|
* @brief A image object
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
|
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
#include "layAbstractMenu.h"
|
|
||||||
#include "imgService.h"
|
#include "imgService.h"
|
||||||
#include "imgPlugin.h"
|
#include "imgPlugin.h"
|
||||||
|
|
||||||
|
|
@ -36,16 +35,16 @@ PluginDeclaration::get_menu_entries (std::vector<lay::MenuEntry> &menu_entries)
|
||||||
{
|
{
|
||||||
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
||||||
menu_entries.push_back (lay::separator ("image_group", "edit_menu.end"));
|
menu_entries.push_back (lay::separator ("image_group", "edit_menu.end"));
|
||||||
menu_entries.push_back (lay::menu_item ("img::add_image", "add_image:edit", "edit_menu.end", tl::to_string (QObject::tr ("Add Image"))));
|
menu_entries.push_back (lay::menu_item ("img::add_image", "add_image:edit", "edit_menu.end", tl::to_string (tr ("Add Image"))));
|
||||||
menu_entries.push_back (lay::submenu ("img::image_menu", "image_menu:edit", "edit_menu.end", tl::to_string (QObject::tr ("Images"))));
|
menu_entries.push_back (lay::submenu ("img::image_menu", "image_menu:edit", "edit_menu.end", tl::to_string (tr ("Images"))));
|
||||||
menu_entries.push_back (lay::menu_item ("img::bring_to_front", "bring_to_front:edit", "edit_menu.image_menu.end", tl::to_string (QObject::tr ("Image Stack: Selected Images to Front"))));
|
menu_entries.push_back (lay::menu_item ("img::bring_to_front", "bring_to_front:edit", "edit_menu.image_menu.end", tl::to_string (tr ("Image Stack: Selected Images to Front"))));
|
||||||
menu_entries.push_back (lay::menu_item ("img::bring_to_back", "bring_to_back:edit", "edit_menu.image_menu.end", tl::to_string (QObject::tr ("Image Stack: Selected Images to Back"))));
|
menu_entries.push_back (lay::menu_item ("img::bring_to_back", "bring_to_back:edit", "edit_menu.image_menu.end", tl::to_string (tr ("Image Stack: Selected Images to Back"))));
|
||||||
menu_entries.push_back (lay::menu_item ("img::clear_all_images", "clear_all_images:edit", "edit_menu.image_menu.end", tl::to_string (QObject::tr ("Clear All Images"))));
|
menu_entries.push_back (lay::menu_item ("img::clear_all_images", "clear_all_images:edit", "edit_menu.image_menu.end", tl::to_string (tr ("Clear All Images"))));
|
||||||
menu_entries.push_back (lay::config_menu_item ("show_images", "view_menu.layout_group+", tl::to_string (QObject::tr ("Show Images")), cfg_images_visible, "?"));
|
menu_entries.push_back (lay::config_menu_item ("show_images", "view_menu.layout_group+", tl::to_string (tr ("Show Images")), cfg_images_visible, "?"));
|
||||||
}
|
}
|
||||||
|
|
||||||
lay::Plugin *
|
lay::Plugin *
|
||||||
PluginDeclaration::create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutView *view) const
|
PluginDeclaration::create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
return new img::Service (manager, view);
|
return new img::Service (manager, view);
|
||||||
}
|
}
|
||||||
|
|
@ -53,7 +52,7 @@ PluginDeclaration::create_plugin (db::Manager *manager, lay::Dispatcher *, lay::
|
||||||
bool
|
bool
|
||||||
PluginDeclaration::implements_editable (std::string &title) const
|
PluginDeclaration::implements_editable (std::string &title) const
|
||||||
{
|
{
|
||||||
title = tl::to_string (QObject::tr ("Images"));
|
title = tl::to_string (tr ("Images"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ class PluginDeclaration
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const;
|
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const;
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutView *view) const;
|
virtual lay::Plugin *create_plugin (db::Manager *manager, lay::Dispatcher *, lay::LayoutViewBase *view) const;
|
||||||
virtual bool implements_editable (std::string &title) const;
|
virtual bool implements_editable (std::string &title) const;
|
||||||
virtual void get_options (std::vector < std::pair<std::string, std::string> > &options) const;
|
virtual void get_options (std::vector < std::pair<std::string, std::string> > &options) const;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "imgPropertiesPage.h"
|
#include "imgPropertiesPage.h"
|
||||||
#include "imgLandmarksDialog.h"
|
#include "imgLandmarksDialog.h"
|
||||||
|
|
@ -735,9 +736,9 @@ PropertiesPage::blue_spinbox_changed (double value)
|
||||||
void
|
void
|
||||||
PropertiesPage::black_to_white ()
|
PropertiesPage::black_to_white ()
|
||||||
{
|
{
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > > nodes;
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > nodes;
|
||||||
nodes.push_back (std::make_pair (0.0, std::make_pair (QColor (0, 0, 0), QColor (0, 0, 0))));
|
nodes.push_back (std::make_pair (0.0, std::make_pair (lay::Color (0, 0, 0), lay::Color (0, 0, 0))));
|
||||||
nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (255, 255, 255), QColor (255, 255, 255))));
|
nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (255, 255, 255), lay::Color (255, 255, 255))));
|
||||||
false_color_control->set_nodes (nodes);
|
false_color_control->set_nodes (nodes);
|
||||||
emit edited ();
|
emit edited ();
|
||||||
}
|
}
|
||||||
|
|
@ -745,9 +746,9 @@ PropertiesPage::black_to_white ()
|
||||||
void
|
void
|
||||||
PropertiesPage::white_to_black ()
|
PropertiesPage::white_to_black ()
|
||||||
{
|
{
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > > nodes;
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > nodes;
|
||||||
nodes.push_back (std::make_pair (0.0, std::make_pair (QColor (255, 255, 255), QColor (255, 255, 255))));
|
nodes.push_back (std::make_pair (0.0, std::make_pair (lay::Color (255, 255, 255), lay::Color (255, 255, 255))));
|
||||||
nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (0, 0, 0), QColor (0, 0, 0))));
|
nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (0, 0, 0), lay::Color (0, 0, 0))));
|
||||||
false_color_control->set_nodes (nodes);
|
false_color_control->set_nodes (nodes);
|
||||||
emit edited ();
|
emit edited ();
|
||||||
}
|
}
|
||||||
|
|
@ -755,9 +756,9 @@ PropertiesPage::white_to_black ()
|
||||||
void
|
void
|
||||||
PropertiesPage::red_to_blue ()
|
PropertiesPage::red_to_blue ()
|
||||||
{
|
{
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > > nodes;
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > nodes;
|
||||||
nodes.push_back (std::make_pair (0.0, std::make_pair (QColor (255, 0, 0), QColor (255, 0, 0))));
|
nodes.push_back (std::make_pair (0.0, std::make_pair (lay::Color (255, 0, 0), lay::Color (255, 0, 0))));
|
||||||
nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (0, 0, 255), QColor (0, 0, 255))));
|
nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (0, 0, 255), lay::Color (0, 0, 255))));
|
||||||
false_color_control->set_nodes (nodes);
|
false_color_control->set_nodes (nodes);
|
||||||
emit edited ();
|
emit edited ();
|
||||||
}
|
}
|
||||||
|
|
@ -765,9 +766,9 @@ PropertiesPage::red_to_blue ()
|
||||||
void
|
void
|
||||||
PropertiesPage::blue_to_red ()
|
PropertiesPage::blue_to_red ()
|
||||||
{
|
{
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > > nodes;
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > nodes;
|
||||||
nodes.push_back (std::make_pair (0.0, std::make_pair (QColor (0, 0, 255), QColor (0, 0, 255))));
|
nodes.push_back (std::make_pair (0.0, std::make_pair (lay::Color (0, 0, 255), lay::Color (0, 0, 255))));
|
||||||
nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (255, 0, 0), QColor (255, 0, 0))));
|
nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (255, 0, 0), lay::Color (255, 0, 0))));
|
||||||
false_color_control->set_nodes (nodes);
|
false_color_control->set_nodes (nodes);
|
||||||
emit edited ();
|
emit edited ();
|
||||||
}
|
}
|
||||||
|
|
@ -775,7 +776,7 @@ PropertiesPage::blue_to_red ()
|
||||||
void
|
void
|
||||||
PropertiesPage::reverse_color_order ()
|
PropertiesPage::reverse_color_order ()
|
||||||
{
|
{
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > > nodes (false_color_control->nodes ());
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > nodes (false_color_control->nodes ());
|
||||||
for (size_t i = 0; i < nodes.size () / 2; ++i) {
|
for (size_t i = 0; i < nodes.size () / 2; ++i) {
|
||||||
std::swap (nodes [i].second.second, nodes [nodes.size () - 1 - i].second.first);
|
std::swap (nodes [i].second.second, nodes [nodes.size () - 1 - i].second.first);
|
||||||
std::swap (nodes [i].second.first, nodes [nodes.size () - 1 - i].second.second);
|
std::swap (nodes [i].second.first, nodes [nodes.size () - 1 - i].second.second);
|
||||||
|
|
@ -1003,3 +1004,4 @@ PropertiesPage::define_landmarks_pressed ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_imgPropertiesPage
|
#ifndef HDR_imgPropertiesPage
|
||||||
#define HDR_imgPropertiesPage
|
#define HDR_imgPropertiesPage
|
||||||
|
|
@ -105,3 +106,5 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -30,23 +30,29 @@
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
#include "layRenderer.h"
|
#include "layRenderer.h"
|
||||||
#include "laySnap.h"
|
#include "laySnap.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayoutViewBase.h"
|
||||||
#include "laybasicConfig.h"
|
#include "laybasicConfig.h"
|
||||||
#include "layLayoutCanvas.h"
|
#if defined(HAVE_QT)
|
||||||
#include "layProperties.h"
|
# include "layProperties.h"
|
||||||
#include "layTipDialog.h"
|
# include "layTipDialog.h"
|
||||||
|
#endif
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
#include "imgService.h"
|
#include "imgService.h"
|
||||||
#include "imgPlugin.h"
|
#include "imgPlugin.h"
|
||||||
#include "ui_AddNewImageDialog.h"
|
#if defined(HAVE_QT)
|
||||||
|
# include "ui_AddNewImageDialog.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <QApplication>
|
#if defined(HAVE_QT)
|
||||||
|
# include <QApplication>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace img
|
namespace img
|
||||||
{
|
{
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
class AddNewImageDialog
|
class AddNewImageDialog
|
||||||
: public QDialog,
|
: public QDialog,
|
||||||
public Ui::AddNewImageDialog
|
public Ui::AddNewImageDialog
|
||||||
|
|
@ -68,7 +74,7 @@ public:
|
||||||
properties_frame->apply ();
|
properties_frame->apply ();
|
||||||
|
|
||||||
if (mp_image_object->is_empty ()) {
|
if (mp_image_object->is_empty ()) {
|
||||||
throw tl::Exception (tl::to_string (QObject::tr ("No data loaded for that image")));
|
throw tl::Exception (tl::to_string (tr ("No data loaded for that image")));
|
||||||
}
|
}
|
||||||
|
|
||||||
QDialog::accept ();
|
QDialog::accept ();
|
||||||
|
|
@ -79,11 +85,12 @@ public:
|
||||||
private:
|
private:
|
||||||
img::Object *mp_image_object;
|
img::Object *mp_image_object;
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
|
||||||
static void
|
static void
|
||||||
draw_scanline (unsigned int level, const img::Object &image_object, QImage &qimage, int y, const db::Matrix3d &t, const db::Matrix3d &it, const db::DPoint &q1, const db::DPoint &q2)
|
draw_scanline (unsigned int level, const img::Object &image_object, lay::PixelBuffer &pxbuffer, int y, const db::Matrix3d &t, const db::Matrix3d &it, const db::DPoint &q1, const db::DPoint &q2)
|
||||||
{
|
{
|
||||||
double source_width = image_object.width ();
|
double source_width = image_object.width ();
|
||||||
double source_height = image_object.height ();
|
double source_height = image_object.height ();
|
||||||
|
|
@ -95,8 +102,8 @@ draw_scanline (unsigned int level, const img::Object &image_object, QImage &qima
|
||||||
std::swap (x1, x2);
|
std::swap (x1, x2);
|
||||||
}
|
}
|
||||||
|
|
||||||
int xstart = int (std::max (0.0, std::min (floor (x1), double (qimage.width ()))));
|
int xstart = int (std::max (0.0, std::min (floor (x1), double (pxbuffer.width ()))));
|
||||||
int xstop = int (std::max (0.0, std::min (ceil (x2) + 1.0, double (qimage.width ()))));
|
int xstop = int (std::max (0.0, std::min (ceil (x2) + 1.0, double (pxbuffer.width ()))));
|
||||||
|
|
||||||
db::DPoint p1 = it.trans (db::DPoint (xstart, y));
|
db::DPoint p1 = it.trans (db::DPoint (xstart, y));
|
||||||
db::DPoint p2 = it.trans (db::DPoint (xstop, y));
|
db::DPoint p2 = it.trans (db::DPoint (xstop, y));
|
||||||
|
|
@ -106,8 +113,8 @@ draw_scanline (unsigned int level, const img::Object &image_object, QImage &qima
|
||||||
|
|
||||||
if (level < 7 && xstop > xstart + 1 && fabs (xm - (xstart + xstop) / 2) > 1.0 && xm > xstart + 1 && xm < xstop - 1) {
|
if (level < 7 && xstop > xstart + 1 && fabs (xm - (xstart + xstop) / 2) > 1.0 && xm > xstart + 1 && xm < xstop - 1) {
|
||||||
|
|
||||||
draw_scanline (level + 1, image_object, qimage, y, t, it, q1, qm);
|
draw_scanline (level + 1, image_object, pxbuffer, y, t, it, q1, qm);
|
||||||
draw_scanline (level + 1, image_object, qimage, y, t, it, qm, q2);
|
draw_scanline (level + 1, image_object, pxbuffer, y, t, it, qm, q2);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
@ -115,8 +122,8 @@ draw_scanline (unsigned int level, const img::Object &image_object, QImage &qima
|
||||||
double dpx = (p2.x () - p1.x ()) / double (xstop - xstart);
|
double dpx = (p2.x () - p1.x ()) / double (xstop - xstart);
|
||||||
double dpy = (p2.y () - p1.y ()) / double (xstop - xstart);
|
double dpy = (p2.y () - p1.y ()) / double (xstop - xstart);
|
||||||
|
|
||||||
QRgb *scanline_data = (QRgb *) qimage.scanLine (qimage.height () - y - 1) + xstart;
|
lay::color_t *scanline_data = pxbuffer.scan_line (pxbuffer.height () - y - 1) + xstart;
|
||||||
QRgb *pixel_data = (QRgb *) image_object.pixel_data ();
|
lay::color_t *pixel_data = (lay::color_t *) image_object.pixel_data ();
|
||||||
const unsigned char *mask_data = image_object.mask ();
|
const unsigned char *mask_data = image_object.mask ();
|
||||||
|
|
||||||
for (int x = xstart; x < xstop; ++x) {
|
for (int x = xstart; x < xstop; ++x) {
|
||||||
|
|
@ -144,15 +151,15 @@ draw_image (const img::Object &image_object, const lay::Viewport &vp, lay::ViewO
|
||||||
{
|
{
|
||||||
// TODO: currently, the images can only be rendered to a bitmap canvas ..
|
// TODO: currently, the images can only be rendered to a bitmap canvas ..
|
||||||
lay::BitmapViewObjectCanvas *bmp_canvas = dynamic_cast<lay::BitmapViewObjectCanvas *> (&canvas);
|
lay::BitmapViewObjectCanvas *bmp_canvas = dynamic_cast<lay::BitmapViewObjectCanvas *> (&canvas);
|
||||||
if (! bmp_canvas) {
|
if (! bmp_canvas || ! bmp_canvas->bg_image ()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage &qimage = bmp_canvas->bg_image ();
|
lay::PixelBuffer &image = *bmp_canvas->bg_image ();
|
||||||
db::DBox source_image_box (0.0, 0.0, image_object.width (), image_object.height ());
|
db::DBox source_image_box (0.0, 0.0, image_object.width (), image_object.height ());
|
||||||
|
|
||||||
// safety measure to avoid division by zero.
|
// safety measure to avoid division by zero.
|
||||||
if (qimage.width () < 1 || qimage.height () < 1) {
|
if (image.width () < 1 || image.height () < 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -165,7 +172,7 @@ draw_image (const img::Object &image_object, const lay::Viewport &vp, lay::ViewO
|
||||||
db::DBox image_box = source_image_box.transformed (t);
|
db::DBox image_box = source_image_box.transformed (t);
|
||||||
|
|
||||||
int y1 = int (floor (std::max (0.0, image_box.bottom ())));
|
int y1 = int (floor (std::max (0.0, image_box.bottom ())));
|
||||||
int y2 = int (floor (std::min (double (qimage.height ()) - 1, image_box.top ())));
|
int y2 = int (floor (std::min (double (image.height ()) - 1, image_box.top ())));
|
||||||
|
|
||||||
for (int y = y1; y <= y2; ++y) {
|
for (int y = y1; y <= y2; ++y) {
|
||||||
|
|
||||||
|
|
@ -175,7 +182,7 @@ draw_image (const img::Object &image_object, const lay::Viewport &vp, lay::ViewO
|
||||||
// clip the transformed scanline to the original image
|
// clip the transformed scanline to the original image
|
||||||
std::pair<bool, db::DEdge> clipped = scanline.clipped_line (source_image_box);
|
std::pair<bool, db::DEdge> clipped = scanline.clipped_line (source_image_box);
|
||||||
if (clipped.first) {
|
if (clipped.first) {
|
||||||
draw_scanline (0, image_object, qimage, y, t, it, clipped.second.p1 (), clipped.second.p2 ());
|
draw_scanline (0, image_object, image, y, t, it, clipped.second.p1 (), clipped.second.p2 ());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -402,7 +409,7 @@ View::render (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas)
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
// img::Service implementation
|
// img::Service implementation
|
||||||
|
|
||||||
Service::Service (db::Manager *manager, lay::LayoutView *view)
|
Service::Service (db::Manager *manager, lay::LayoutViewBase *view)
|
||||||
: lay::BackgroundViewObject (view->view_object_widget ()),
|
: lay::BackgroundViewObject (view->view_object_widget ()),
|
||||||
lay::Editable (view),
|
lay::Editable (view),
|
||||||
lay::Plugin (view),
|
lay::Plugin (view),
|
||||||
|
|
@ -1361,19 +1368,21 @@ Service::display_status (bool transient)
|
||||||
|
|
||||||
std::string msg;
|
std::string msg;
|
||||||
if (! transient) {
|
if (! transient) {
|
||||||
msg = tl::to_string (QObject::tr ("selected: "));
|
msg = tl::to_string (tr ("selected: "));
|
||||||
}
|
}
|
||||||
msg += tl::sprintf (tl::to_string (QObject::tr ("image(%dx%d)")), image->width (), image->height ());
|
msg += tl::sprintf (tl::to_string (tr ("image(%dx%d)")), image->width (), image->height ());
|
||||||
view ()->message (msg);
|
view ()->message (msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
lay::PropertiesPage *
|
lay::PropertiesPage *
|
||||||
Service::properties_page (db::Manager *manager, QWidget *parent)
|
Service::properties_page (db::Manager *manager, QWidget *parent)
|
||||||
{
|
{
|
||||||
return new img::PropertiesPage (this, manager, parent);
|
return new img::PropertiesPage (this, manager, parent);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
Service::get_selection (std::vector <obj_iterator> &sel) const
|
Service::get_selection (std::vector <obj_iterator> &sel) const
|
||||||
|
|
@ -1463,15 +1472,16 @@ Service::menu_activated (const std::string &symbol)
|
||||||
{
|
{
|
||||||
if (symbol == "img::clear_all_images") {
|
if (symbol == "img::clear_all_images") {
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Clear all images")));
|
manager ()->transaction (tl::to_string (tr ("Clear all images")));
|
||||||
clear_images ();
|
clear_images ();
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
|
|
||||||
} else if (symbol == "img::add_image") {
|
} else if (symbol == "img::add_image") {
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
if (! images_visible ()) {
|
if (! images_visible ()) {
|
||||||
lay::TipDialog td (QApplication::activeWindow (),
|
lay::TipDialog td (QApplication::activeWindow (),
|
||||||
tl::to_string (QObject::tr ("Images are not visible. If you add an image you will not see it.\n\n"
|
tl::to_string (tr ("Images are not visible. If you add an image you will not see it.\n\n"
|
||||||
"Choose 'View/Show Images' to make images visible.")),
|
"Choose 'View/Show Images' to make images visible.")),
|
||||||
"add-image-while-not-visible",
|
"add-image-while-not-visible",
|
||||||
lay::TipDialog::okcancel_buttons);
|
lay::TipDialog::okcancel_buttons);
|
||||||
|
|
@ -1482,6 +1492,7 @@ Service::menu_activated (const std::string &symbol)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
add_image ();
|
add_image ();
|
||||||
|
|
||||||
|
|
@ -1573,6 +1584,7 @@ Service::top_z_position () const
|
||||||
void
|
void
|
||||||
Service::add_image ()
|
Service::add_image ()
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_QT)
|
||||||
img::Object *new_image = new img::Object ();
|
img::Object *new_image = new img::Object ();
|
||||||
|
|
||||||
AddNewImageDialog dialog (QApplication::activeWindow (), new_image);
|
AddNewImageDialog dialog (QApplication::activeWindow (), new_image);
|
||||||
|
|
@ -1580,7 +1592,7 @@ Service::add_image ()
|
||||||
|
|
||||||
clear_selection ();
|
clear_selection ();
|
||||||
|
|
||||||
manager ()->transaction (tl::to_string (QObject::tr ("Add image")));
|
manager ()->transaction (tl::to_string (tr ("Add image")));
|
||||||
new_image->set_z_position (top_z_position ());
|
new_image->set_z_position (top_z_position ());
|
||||||
mp_view->annotation_shapes ().insert (db::DUserObject (new_image));
|
mp_view->annotation_shapes ().insert (db::DUserObject (new_image));
|
||||||
manager ()->commit ();
|
manager ()->commit ();
|
||||||
|
|
@ -1588,6 +1600,7 @@ Service::add_image ()
|
||||||
} else {
|
} else {
|
||||||
delete new_image;
|
delete new_image;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -203,7 +203,7 @@ public:
|
||||||
typedef lay::AnnotationShapes::iterator obj_iterator;
|
typedef lay::AnnotationShapes::iterator obj_iterator;
|
||||||
enum MoveMode { move_none, move_selected, move_landmark, move_l, move_r, move_t, move_b, move_lr, move_tr, move_ll, move_tl, move_all };
|
enum MoveMode { move_none, move_selected, move_landmark, move_l, move_r, move_t, move_b, move_lr, move_tr, move_ll, move_tl, move_all };
|
||||||
|
|
||||||
Service (db::Manager *manager, lay::LayoutView *view);
|
Service (db::Manager *manager, lay::LayoutViewBase *view);
|
||||||
|
|
||||||
~Service ();
|
~Service ();
|
||||||
|
|
||||||
|
|
@ -369,10 +369,12 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void transform (const db::DCplxTrans &trans);
|
virtual void transform (const db::DCplxTrans &trans);
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
/**
|
/**
|
||||||
* @brief Create the properties page
|
* @brief Create the properties page
|
||||||
*/
|
*/
|
||||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the selection for the properties page
|
* @brief Get the selection for the properties page
|
||||||
|
|
@ -432,7 +434,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Access to the view object
|
* @brief Access to the view object
|
||||||
*/
|
*/
|
||||||
lay::LayoutView *view () const
|
lay::LayoutViewBase *view () const
|
||||||
{
|
{
|
||||||
return mp_view;
|
return mp_view;
|
||||||
}
|
}
|
||||||
|
|
@ -480,7 +482,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// The layout view that the image service is attached to
|
// The layout view that the image service is attached to
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
|
|
||||||
// The view objects representing the selection and the moved images in move mode
|
// The view objects representing the selection and the moved images in move mode
|
||||||
std::vector<View *> m_selected_image_views;
|
std::vector<View *> m_selected_image_views;
|
||||||
|
|
|
||||||
|
|
@ -373,7 +373,7 @@ namespace {
|
||||||
|
|
||||||
struct ColorMapConverter
|
struct ColorMapConverter
|
||||||
{
|
{
|
||||||
std::string to_string (const std::pair<double, std::pair<QColor, QColor> > &cm) const
|
std::string to_string (const std::pair<double, std::pair<lay::Color, lay::Color> > &cm) const
|
||||||
{
|
{
|
||||||
std::string s;
|
std::string s;
|
||||||
s = tl::to_string (cm.first);
|
s = tl::to_string (cm.first);
|
||||||
|
|
@ -389,7 +389,7 @@ namespace {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void from_string (const std::string &s, std::pair<double, std::pair<QColor, QColor> > &cm) const
|
void from_string (const std::string &s, std::pair<double, std::pair<lay::Color, lay::Color> > &cm) const
|
||||||
{
|
{
|
||||||
tl::Extractor ex (s.c_str ());
|
tl::Extractor ex (s.c_str ());
|
||||||
|
|
||||||
|
|
@ -427,7 +427,7 @@ tl::XMLStruct<ImageProxy> s_img_structure ("image-data",
|
||||||
tl::make_member (&ImageProxy::max_value, &ImageProxy::set_max_value, "max-value") +
|
tl::make_member (&ImageProxy::max_value, &ImageProxy::set_max_value, "max-value") +
|
||||||
tl::make_element (&ImageProxy::data_mapping, &ImageProxy::set_data_mapping, "data-mapping",
|
tl::make_element (&ImageProxy::data_mapping, &ImageProxy::set_data_mapping, "data-mapping",
|
||||||
tl::make_element (&img::DataMapping::false_color_nodes, "color-map",
|
tl::make_element (&img::DataMapping::false_color_nodes, "color-map",
|
||||||
tl::make_member<std::pair<double, std::pair<QColor, QColor> >, img::DataMapping::false_color_nodes_type::const_iterator, img::DataMapping::false_color_nodes_type, ColorMapConverter> (&img::DataMapping::false_color_nodes_type::begin, &img::DataMapping::false_color_nodes_type::end, &img::DataMapping::false_color_nodes_type::push_back, "color-map-entry", ColorMapConverter ())
|
tl::make_member<std::pair<double, std::pair<lay::Color, lay::Color> >, img::DataMapping::false_color_nodes_type::const_iterator, img::DataMapping::false_color_nodes_type, ColorMapConverter> (&img::DataMapping::false_color_nodes_type::begin, &img::DataMapping::false_color_nodes_type::end, &img::DataMapping::false_color_nodes_type::push_back, "color-map-entry", ColorMapConverter ())
|
||||||
) +
|
) +
|
||||||
tl::make_member (&img::DataMapping::brightness, "brightness") +
|
tl::make_member (&img::DataMapping::brightness, "brightness") +
|
||||||
tl::make_member (&img::DataMapping::contrast, "contrast") +
|
tl::make_member (&img::DataMapping::contrast, "contrast") +
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#include "imgWidgets.h"
|
#include "imgWidgets.h"
|
||||||
|
|
||||||
|
|
@ -44,52 +45,6 @@ const int min_bar_height = 4;
|
||||||
const double min_value_interval = 1e-3;
|
const double min_value_interval = 1e-3;
|
||||||
const double epsilon = 1e-6;
|
const double epsilon = 1e-6;
|
||||||
|
|
||||||
struct compare_first_of_node
|
|
||||||
{
|
|
||||||
bool operator() (const std::pair <double, std::pair<QColor, QColor> > &a, const std::pair <double, std::pair<QColor, QColor> > &b) const
|
|
||||||
{
|
|
||||||
return a.first < b.first;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
QColor
|
|
||||||
interpolated_color (const std::vector<std::pair <double, std::pair<QColor, QColor> > > &nodes, double x)
|
|
||||||
{
|
|
||||||
if (nodes.size () < 1) {
|
|
||||||
return QColor ();
|
|
||||||
} else if (nodes.size () < 2) {
|
|
||||||
return x < nodes[0].first ? nodes[0].second.first : nodes[0].second.second;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
std::vector<std::pair<double, std::pair<QColor, QColor> > >::const_iterator p = std::lower_bound (nodes.begin (), nodes.end (), std::make_pair (x, std::make_pair (QColor (), QColor ())), compare_first_of_node ());
|
|
||||||
if (p == nodes.end ()) {
|
|
||||||
return nodes.back ().second.second;
|
|
||||||
} else if (p == nodes.begin ()) {
|
|
||||||
return nodes.front ().second.first;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
double x1 = p[-1].first;
|
|
||||||
double x2 = p->first;
|
|
||||||
|
|
||||||
int h1 = 0, s1 = 0, v1 = 0;
|
|
||||||
p[-1].second.second.getHsv (&h1, &s1, &v1);
|
|
||||||
|
|
||||||
int h2 = 0, s2 = 0, v2 = 0;
|
|
||||||
p->second.first.getHsv (&h2, &s2, &v2);
|
|
||||||
|
|
||||||
int h = int (0.5 + h1 + double(x - x1) * double (h2 - h1) / double(x2 - x1));
|
|
||||||
int s = int (0.5 + s1 + double(x - x1) * double (s2 - s1) / double(x2 - x1));
|
|
||||||
int v = int (0.5 + v1 + double(x - x1) * double (v2 - v1) / double(x2 - x1));
|
|
||||||
|
|
||||||
QColor r;
|
|
||||||
r.setHsv (h, s, v);
|
|
||||||
return r;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
TwoColorWidget::TwoColorWidget (QWidget *parent)
|
TwoColorWidget::TwoColorWidget (QWidget *parent)
|
||||||
|
|
@ -173,8 +128,8 @@ TwoColorWidget::lock_changed (bool checked)
|
||||||
ColorBar::ColorBar (QWidget *parent)
|
ColorBar::ColorBar (QWidget *parent)
|
||||||
: QWidget (parent), m_dragging (false), m_selected (-1)
|
: QWidget (parent), m_dragging (false), m_selected (-1)
|
||||||
{
|
{
|
||||||
m_nodes.push_back (std::make_pair (0.0, std::make_pair (QColor (0, 0, 0), QColor (0, 0, 0))));
|
m_nodes.push_back (std::make_pair (0.0, std::make_pair (lay::Color (0, 0, 0), lay::Color (0, 0, 0))));
|
||||||
m_nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (255, 255, 255), QColor (255, 255, 255))));
|
m_nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (255, 255, 255), lay::Color (255, 255, 255))));
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorBar::~ColorBar ()
|
ColorBar::~ColorBar ()
|
||||||
|
|
@ -206,7 +161,7 @@ void
|
||||||
ColorBar::set_current_color (std::pair<QColor, QColor> c)
|
ColorBar::set_current_color (std::pair<QColor, QColor> c)
|
||||||
{
|
{
|
||||||
if (has_selection ()) {
|
if (has_selection ()) {
|
||||||
m_nodes [m_selected].second = c;
|
m_nodes [m_selected].second = std::make_pair (lay::Color (c.first.rgb ()), lay::Color (c.second.rgb ()));
|
||||||
emit color_mapping_changed ();
|
emit color_mapping_changed ();
|
||||||
update ();
|
update ();
|
||||||
}
|
}
|
||||||
|
|
@ -260,22 +215,35 @@ ColorBar::keyPressEvent (QKeyEvent *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
struct compare_first_of_node
|
||||||
|
{
|
||||||
|
bool operator() (const std::pair <double, std::pair<lay::Color, lay::Color> > &a, const std::pair <double, std::pair<lay::Color, lay::Color> > &b) const
|
||||||
|
{
|
||||||
|
return a.first < b.first;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ColorBar::set_nodes (const std::vector<std::pair<double, std::pair<QColor, QColor> > > &nodes)
|
ColorBar::set_nodes (const std::vector<std::pair<double, std::pair<lay::Color, lay::Color> > > &nodes)
|
||||||
{
|
{
|
||||||
m_nodes = nodes;
|
m_nodes = nodes;
|
||||||
|
|
||||||
std::sort (m_nodes.begin (), m_nodes.end (), compare_first_of_node ());
|
std::sort (m_nodes.begin (), m_nodes.end (), compare_first_of_node ());
|
||||||
|
|
||||||
if (m_nodes.size () == 0 || fabs (m_nodes[0].first) > epsilon) {
|
if (m_nodes.size () == 0 || fabs (m_nodes[0].first) > epsilon) {
|
||||||
m_nodes.insert (m_nodes.begin (), std::make_pair (0.0, std::make_pair (QColor (0, 0, 0), QColor (0, 0, 0))));
|
m_nodes.insert (m_nodes.begin (), std::make_pair (0.0, std::make_pair (lay::Color (0, 0, 0), lay::Color (0, 0, 0))));
|
||||||
} else {
|
} else {
|
||||||
m_nodes[0].first = 0.0;
|
m_nodes[0].first = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > >::iterator w = m_nodes.begin ();
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > >::iterator w = m_nodes.begin ();
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > >::const_iterator nn = m_nodes.begin ();
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > >::const_iterator nn = m_nodes.begin ();
|
||||||
for (std::vector <std::pair <double, std::pair<QColor, QColor> > >::const_iterator n = m_nodes.begin () + 1; n != m_nodes.end (); ++n) {
|
for (std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > >::const_iterator n = m_nodes.begin () + 1; n != m_nodes.end (); ++n) {
|
||||||
if (fabs (nn->first - n->first) > min_value_interval) {
|
if (fabs (nn->first - n->first) > min_value_interval) {
|
||||||
*w++ = *nn;
|
*w++ = *nn;
|
||||||
nn = n;
|
nn = n;
|
||||||
|
|
@ -288,7 +256,7 @@ ColorBar::set_nodes (const std::vector<std::pair<double, std::pair<QColor, QColo
|
||||||
if (m_nodes.back ().first > 1.0 - min_value_interval) {
|
if (m_nodes.back ().first > 1.0 - min_value_interval) {
|
||||||
m_nodes.back ().first = 1.0;
|
m_nodes.back ().first = 1.0;
|
||||||
} else {
|
} else {
|
||||||
m_nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (255, 255, 255), QColor (255, 255, 255))));
|
m_nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (255, 255, 255), lay::Color (255, 255, 255))));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_selected = -1;
|
m_selected = -1;
|
||||||
|
|
@ -313,8 +281,8 @@ ColorBar::mousePressEvent (QMouseEvent *event)
|
||||||
double xx = double (event->x () - xl) / double (xr - xl);
|
double xx = double (event->x () - xl) / double (xr - xl);
|
||||||
|
|
||||||
double dmin = 100.0;
|
double dmin = 100.0;
|
||||||
std::vector<std::pair<double, std::pair<QColor, QColor> > >::const_iterator pmin = m_nodes.end ();
|
std::vector<std::pair<double, std::pair<lay::Color, lay::Color> > >::const_iterator pmin = m_nodes.end ();
|
||||||
for (std::vector<std::pair<double, std::pair<QColor, QColor> > >::const_iterator p = m_nodes.begin (); p != m_nodes.end (); ++p) {
|
for (std::vector<std::pair<double, std::pair<lay::Color, lay::Color> > >::const_iterator p = m_nodes.begin (); p != m_nodes.end (); ++p) {
|
||||||
double d = fabs (p->first - xx);
|
double d = fabs (p->first - xx);
|
||||||
if (d < 0.05 && d < dmin) {
|
if (d < 0.05 && d < dmin) {
|
||||||
dmin = d;
|
dmin = d;
|
||||||
|
|
@ -323,9 +291,10 @@ ColorBar::mousePressEvent (QMouseEvent *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pmin != m_nodes.end ()) {
|
if (pmin != m_nodes.end ()) {
|
||||||
m_selected = int (std::distance (std::vector<std::pair<double, std::pair<QColor, QColor> > >::const_iterator (m_nodes.begin ()), pmin));
|
m_selected = int (std::distance (std::vector<std::pair<double, std::pair<lay::Color, lay::Color> > >::const_iterator (m_nodes.begin ()), pmin));
|
||||||
emit selection_changed ();
|
emit selection_changed ();
|
||||||
emit selection_changed (m_nodes [m_selected].second);
|
std::pair<lay::Color, lay::Color> cp = m_nodes [m_selected].second;
|
||||||
|
emit selection_changed (std::make_pair (QColor (cp.first.rgb ()), QColor (cp.second.rgb ())));
|
||||||
m_dragging = true;
|
m_dragging = true;
|
||||||
update ();
|
update ();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -359,13 +328,14 @@ ColorBar::mouseDoubleClickEvent (QMouseEvent *event)
|
||||||
|
|
||||||
double xx = double (event->x () - xl) / double (xr - xl);
|
double xx = double (event->x () - xl) / double (xr - xl);
|
||||||
|
|
||||||
std::vector<std::pair<double, std::pair<QColor, QColor> > >::iterator p = std::lower_bound (m_nodes.begin (), m_nodes.end (), std::make_pair (xx, std::make_pair (QColor (), QColor ())), compare_first_of_node ());
|
std::vector<std::pair<double, std::pair<lay::Color, lay::Color> > >::iterator p = std::lower_bound (m_nodes.begin (), m_nodes.end (), std::make_pair (xx, std::make_pair (lay::Color (), lay::Color ())), compare_first_of_node ());
|
||||||
if (p != m_nodes.begin () && p != m_nodes.end ()) {
|
if (p != m_nodes.begin () && p != m_nodes.end ()) {
|
||||||
m_selected = int (std::distance (m_nodes.begin (), p));
|
m_selected = int (std::distance (m_nodes.begin (), p));
|
||||||
QColor ci = interpolated_color (m_nodes, xx);
|
lay::Color ci = interpolated_color (m_nodes, xx);
|
||||||
m_nodes.insert (p, std::make_pair (xx, std::make_pair (ci, ci)));
|
m_nodes.insert (p, std::make_pair (xx, std::make_pair (ci, ci)));
|
||||||
emit selection_changed ();
|
emit selection_changed ();
|
||||||
emit selection_changed (m_nodes [m_selected].second);
|
std::pair<lay::Color, lay::Color> cp = m_nodes [m_selected].second;
|
||||||
|
emit selection_changed (std::make_pair (QColor (cp.first.rgb ()), QColor (cp.second.rgb ())));
|
||||||
emit color_mapping_changed ();
|
emit color_mapping_changed ();
|
||||||
update ();
|
update ();
|
||||||
}
|
}
|
||||||
|
|
@ -440,9 +410,9 @@ ColorBar::paintEvent (QPaintEvent *)
|
||||||
if (xr != xl) {
|
if (xr != xl) {
|
||||||
xx = double (x - xl) / double (xr - xl);
|
xx = double (x - xl) / double (xr - xl);
|
||||||
}
|
}
|
||||||
QColor c = interpolated_color (m_nodes, xx);
|
lay::Color c = interpolated_color (m_nodes, xx);
|
||||||
|
|
||||||
painter.fillRect (x, yb - hbar, 1, hbar + 1, QBrush (c));
|
painter.fillRect (x, yb - hbar, 1, hbar + 1, QBrush (QColor (c.rgb ())));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -483,3 +453,5 @@ ColorBar::paintEvent (QPaintEvent *)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,14 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_QT)
|
||||||
|
|
||||||
#ifndef HDR_imgWidgets
|
#ifndef HDR_imgWidgets
|
||||||
#define HDR_imgWidgets
|
#define HDR_imgWidgets
|
||||||
|
|
||||||
#include "layWidgets.h"
|
#include "layWidgets.h"
|
||||||
|
#include "layColor.h"
|
||||||
|
#include "imgObject.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
@ -38,13 +42,6 @@ class QPaintEvent;
|
||||||
namespace img
|
namespace img
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief A helper function to interpolate a color in the color bar at a given x
|
|
||||||
*
|
|
||||||
* TODO: move this somewhere else.
|
|
||||||
*/
|
|
||||||
QColor interpolated_color (const std::vector<std::pair <double, std::pair<QColor, QColor> > > &nodes, double x);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A two-color widget
|
* @brief A two-color widget
|
||||||
*
|
*
|
||||||
|
|
@ -114,9 +111,9 @@ public:
|
||||||
return m_selected >= 0;
|
return m_selected >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_nodes (const std::vector <std::pair <double, std::pair<QColor, QColor> > > &nodes);
|
void set_nodes (const std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > &nodes);
|
||||||
|
|
||||||
const std::vector <std::pair <double, std::pair<QColor, QColor> > > &nodes () const
|
const std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > &nodes () const
|
||||||
{
|
{
|
||||||
return m_nodes;
|
return m_nodes;
|
||||||
}
|
}
|
||||||
|
|
@ -135,7 +132,7 @@ signals:
|
||||||
private:
|
private:
|
||||||
bool m_dragging;
|
bool m_dragging;
|
||||||
int m_selected;
|
int m_selected;
|
||||||
std::vector <std::pair <double, std::pair<QColor, QColor> > > m_nodes;
|
std::vector <std::pair <double, std::pair<lay::Color, lay::Color> > > m_nodes;
|
||||||
std::vector <size_t> m_histogram;
|
std::vector <size_t> m_histogram;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -143,3 +140,4 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -45,9 +45,9 @@ TEST(1_FloatMono)
|
||||||
dm.gamma = 1.5;
|
dm.gamma = 1.5;
|
||||||
dm.brightness = 1.25;
|
dm.brightness = 1.25;
|
||||||
dm.false_color_nodes.clear ();
|
dm.false_color_nodes.clear ();
|
||||||
dm.false_color_nodes.push_back (std::make_pair (0.0, std::make_pair (QColor (0, 0, 0), QColor (0, 0, 0))));
|
dm.false_color_nodes.push_back (std::make_pair (0.0, std::make_pair (lay::Color (0, 0, 0), lay::Color (0, 0, 0))));
|
||||||
dm.false_color_nodes.push_back (std::make_pair (0.5, std::make_pair (QColor (255, 0, 0), QColor (0, 255, 0))));
|
dm.false_color_nodes.push_back (std::make_pair (0.5, std::make_pair (lay::Color (255, 0, 0), lay::Color (0, 255, 0))));
|
||||||
dm.false_color_nodes.push_back (std::make_pair (1.0, std::make_pair (QColor (255, 255, 255), QColor (255, 255, 255))));
|
dm.false_color_nodes.push_back (std::make_pair (1.0, std::make_pair (lay::Color (255, 255, 255), lay::Color (255, 255, 255))));
|
||||||
image.set_data_mapping (dm);
|
image.set_data_mapping (dm);
|
||||||
|
|
||||||
image.set_pixel (0, 0, 0.25);
|
image.set_pixel (0, 0, 0.25);
|
||||||
|
|
|
||||||
|
|
@ -101,8 +101,8 @@ TEST(1)
|
||||||
dm.red_gain = 1.25;
|
dm.red_gain = 1.25;
|
||||||
dm.green_gain = 0.75;
|
dm.green_gain = 0.75;
|
||||||
dm.blue_gain = 2.5;
|
dm.blue_gain = 2.5;
|
||||||
QColor c (128, 255, 64);
|
lay::Color c (128, 255, 64);
|
||||||
QColor c2 (64, 32, 192);
|
lay::Color c2 (64, 32, 192);
|
||||||
dm.false_color_nodes.insert (dm.false_color_nodes.begin () + 1, std::make_pair (0.5, std::make_pair (c, c)));
|
dm.false_color_nodes.insert (dm.false_color_nodes.begin () + 1, std::make_pair (0.5, std::make_pair (c, c)));
|
||||||
image.set_data_mapping (dm);
|
image.set_data_mapping (dm);
|
||||||
EXPECT_EQ (copy1.equals (&image), false);
|
EXPECT_EQ (copy1.equals (&image), false);
|
||||||
|
|
@ -226,7 +226,7 @@ TEST(2)
|
||||||
dm.red_gain = 1.25;
|
dm.red_gain = 1.25;
|
||||||
dm.green_gain = 0.75;
|
dm.green_gain = 0.75;
|
||||||
dm.blue_gain = 2.5;
|
dm.blue_gain = 2.5;
|
||||||
QColor c (128, 255, 64);
|
lay::Color c (128, 255, 64);
|
||||||
dm.false_color_nodes.insert (dm.false_color_nodes.begin () + 1, std::make_pair (0.5, std::make_pair (c, c)));
|
dm.false_color_nodes.insert (dm.false_color_nodes.begin () + 1, std::make_pair (0.5, std::make_pair (c, c)));
|
||||||
image.set_data_mapping (dm);
|
image.set_data_mapping (dm);
|
||||||
EXPECT_EQ (copy1.equals (&image), false);
|
EXPECT_EQ (copy1.equals (&image), false);
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,10 @@ RDB_INC = $$PWD/rdb/rdb
|
||||||
IMG_INC = $$PWD/img/img
|
IMG_INC = $$PWD/img/img
|
||||||
LYM_INC = $$PWD/lym/lym
|
LYM_INC = $$PWD/lym/lym
|
||||||
LIB_INC = $$PWD/lib/lib
|
LIB_INC = $$PWD/lib/lib
|
||||||
LAY_INC = $$PWD/lay/lay
|
|
||||||
LAYBASIC_INC = $$PWD/laybasic/laybasic
|
LAYBASIC_INC = $$PWD/laybasic/laybasic
|
||||||
|
LAYVIEW_INC = $$PWD/layview/layview
|
||||||
|
LAYUI_INC = $$PWD/layui/layui
|
||||||
|
LAY_INC = $$PWD/lay/lay
|
||||||
|
|
||||||
QTBASIC_INC = $$PWD/gsiqt/qtbasic
|
QTBASIC_INC = $$PWD/gsiqt/qtbasic
|
||||||
|
|
||||||
|
|
@ -72,6 +74,15 @@ equals(HAVE_CURL, "1") {
|
||||||
DEFINES += HAVE_CURL
|
DEFINES += HAVE_CURL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
equals(HAVE_PNG, "1") {
|
||||||
|
!isEmpty(BITS_PATH) {
|
||||||
|
include($$BITS_PATH/png/png.pri)
|
||||||
|
} else {
|
||||||
|
LIBS += -lpng
|
||||||
|
}
|
||||||
|
DEFINES += HAVE_PNG
|
||||||
|
}
|
||||||
|
|
||||||
equals(HAVE_EXPAT, "1") {
|
equals(HAVE_EXPAT, "1") {
|
||||||
!isEmpty(BITS_PATH) {
|
!isEmpty(BITS_PATH) {
|
||||||
include($$BITS_PATH/expat/expat.pri)
|
include($$BITS_PATH/expat/expat.pri)
|
||||||
|
|
|
||||||
|
|
@ -11,19 +11,25 @@ SUBDIRS = \
|
||||||
lib \
|
lib \
|
||||||
plugins \
|
plugins \
|
||||||
unit_tests \
|
unit_tests \
|
||||||
|
buddies \
|
||||||
|
lym \
|
||||||
|
laybasic \
|
||||||
|
layview \
|
||||||
|
ant \
|
||||||
|
img \
|
||||||
|
edt \
|
||||||
|
|
||||||
|
equals(HAVE_RUBY, "1") {
|
||||||
|
SUBDIRS += drc lvs
|
||||||
|
}
|
||||||
|
|
||||||
!equals(HAVE_QT, "0") {
|
!equals(HAVE_QT, "0") {
|
||||||
|
|
||||||
# TODO: make buddies able to build without Qt
|
# TODO: make buddies able to build without Qt
|
||||||
SUBDIRS += \
|
SUBDIRS += \
|
||||||
klayout_main \
|
klayout_main \
|
||||||
laybasic \
|
|
||||||
lay \
|
lay \
|
||||||
ant \
|
layui \
|
||||||
buddies \
|
|
||||||
lym \
|
|
||||||
img \
|
|
||||||
edt \
|
|
||||||
fontgen \
|
fontgen \
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -58,21 +64,33 @@ db.depends += gsi
|
||||||
rdb.depends += db
|
rdb.depends += db
|
||||||
lib.depends += db
|
lib.depends += db
|
||||||
|
|
||||||
plugins.depends += lib rdb db
|
buddies.depends += plugins lym $$LANG_DEPENDS
|
||||||
|
lym.depends += gsi $$LANG_DEPENDS
|
||||||
|
|
||||||
!equals(HAVE_QT, "0") {
|
laybasic.depends += rdb
|
||||||
|
layview.depends += laybasic
|
||||||
|
|
||||||
buddies.depends += plugins lym $$LANG_DEPENDS
|
ant.depends += layview
|
||||||
|
img.depends += layview
|
||||||
|
edt.depends += layview
|
||||||
|
|
||||||
equals(HAVE_PYTHON, "1") {
|
plugins.depends += lib rdb db ant
|
||||||
pymod.depends += lay
|
|
||||||
}
|
|
||||||
|
|
||||||
equals(HAVE_RUBY, "1") {
|
equals(HAVE_PYTHON, "1") {
|
||||||
SUBDIRS += drc lvs
|
pymod.depends += layview ant img edt lym
|
||||||
|
}
|
||||||
|
|
||||||
|
equals(HAVE_RUBY, "1") {
|
||||||
MAIN_DEPENDS += drc lvs
|
MAIN_DEPENDS += drc lvs
|
||||||
drc.depends += rdb lym
|
drc.depends += rdb lym
|
||||||
lvs.depends += drc
|
lvs.depends += drc
|
||||||
|
buddies.depends += drc lvs
|
||||||
|
}
|
||||||
|
|
||||||
|
!equals(HAVE_QT, "0") {
|
||||||
|
|
||||||
|
equals(HAVE_PYTHON, "1") {
|
||||||
|
pymod.depends += lay
|
||||||
}
|
}
|
||||||
|
|
||||||
equals(HAVE_QTBINDINGS, "1") {
|
equals(HAVE_QTBINDINGS, "1") {
|
||||||
|
|
@ -87,23 +105,14 @@ plugins.depends += lib rdb db
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins.depends += lay ant
|
layui.depends += laybasic
|
||||||
|
layview.depends += layui
|
||||||
|
lay.depends += ant img edt layui
|
||||||
|
|
||||||
lym.depends += gsi $$LANG_DEPENDS
|
plugins.depends += lay
|
||||||
laybasic.depends += rdb lym
|
|
||||||
ant.depends += laybasic
|
|
||||||
img.depends += laybasic
|
|
||||||
edt.depends += laybasic
|
|
||||||
|
|
||||||
lay.depends += laybasic ant img edt
|
|
||||||
|
|
||||||
klayout_main.depends += plugins $$MAIN_DEPENDS
|
klayout_main.depends += plugins $$MAIN_DEPENDS
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unit_tests.depends += plugins $$MAIN_DEPENDS $$LANG_DEPENDS
|
unit_tests.depends += plugins $$MAIN_DEPENDS $$LANG_DEPENDS
|
||||||
|
|
||||||
RESOURCES += \
|
|
||||||
plugins/tools/import/lay_plugin/layResources.qrc \
|
|
||||||
laybasic/laybasic/layResources.qrc
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,6 @@ HEADERS = \
|
||||||
laySignalHandler.h \
|
laySignalHandler.h \
|
||||||
layLibraryController.h \
|
layLibraryController.h \
|
||||||
layFontController.h \
|
layFontController.h \
|
||||||
layNativePlugin.h \
|
|
||||||
laySystemPaths.h \
|
laySystemPaths.h \
|
||||||
layMacroEditorSetupPage.h \
|
layMacroEditorSetupPage.h \
|
||||||
layPasswordDialog.h \
|
layPasswordDialog.h \
|
||||||
|
|
@ -164,7 +163,6 @@ SOURCES = \
|
||||||
laySignalHandler.cc \
|
laySignalHandler.cc \
|
||||||
layLibraryController.cc \
|
layLibraryController.cc \
|
||||||
layFontController.cc \
|
layFontController.cc \
|
||||||
layNativePlugin.cc \
|
|
||||||
laySystemPaths.cc \
|
laySystemPaths.cc \
|
||||||
layMacroEditorSetupPage.cc \
|
layMacroEditorSetupPage.cc \
|
||||||
layPasswordDialog.cc \
|
layPasswordDialog.cc \
|
||||||
|
|
@ -179,9 +177,9 @@ RESOURCES = layBuildInMacros.qrc \
|
||||||
laySaltTemplates.qrc \
|
laySaltTemplates.qrc \
|
||||||
layDRCLVSHelpResources.qrc
|
layDRCLVSHelpResources.qrc
|
||||||
|
|
||||||
INCLUDEPATH += $$TL_INC $$GSI_INC $$DB_INC $$RDB_INC $$LAYBASIC_INC $$ANT_INC $$IMG_INC $$EDT_INC $$LYM_INC
|
INCLUDEPATH += $$TL_INC $$GSI_INC $$DB_INC $$RDB_INC $$LAYBASIC_INC $$LAYUI_INC $$LAYVIEW_INC $$ANT_INC $$IMG_INC $$EDT_INC $$LYM_INC
|
||||||
DEPENDPATH += $$TL_INC $$GSI_INC $$DB_INC $$RDB_INC $$LAYBASIC_INC $$ANT_INC $$IMG_INC $$EDT_INC $$LYM_INC
|
DEPENDPATH += $$TL_INC $$GSI_INC $$DB_INC $$RDB_INC $$LAYBASIC_INC $$LAYUI_INC $$LAYVIEW_INC $$ANT_INC $$IMG_INC $$EDT_INC $$LYM_INC
|
||||||
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_gsi -lklayout_db -lklayout_rdb -lklayout_lym -lklayout_laybasic -lklayout_ant -lklayout_img -lklayout_edt
|
LIBS += -L$$DESTDIR -lklayout_tl -lklayout_gsi -lklayout_db -lklayout_rdb -lklayout_lym -lklayout_laybasic -lklayout_layview -lklayout_layui -lklayout_ant -lklayout_img -lklayout_edt
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
# for stack trace support:
|
# for stack trace support:
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ public:
|
||||||
menu_entries.push_back (lay::menu_item ("clip_tool::show", "clip_tool:edit_mode", "edit_menu.utils_menu.end", tl::to_string (QObject::tr ("Clip Tool"))));
|
menu_entries.push_back (lay::menu_item ("clip_tool::show", "clip_tool:edit_mode", "edit_menu.utils_menu.end", tl::to_string (QObject::tr ("Clip Tool"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutView *view) const
|
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
return new ClipDialog (root, view);
|
return new ClipDialog (root, view);
|
||||||
}
|
}
|
||||||
|
|
@ -66,7 +66,7 @@ static tl::RegisteredClass<lay::PluginDeclaration> config_decl (new ClipDialogPl
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
|
|
||||||
ClipDialog::ClipDialog (lay::Dispatcher *root, lay::LayoutView *vw)
|
ClipDialog::ClipDialog (lay::Dispatcher *root, LayoutViewBase *vw)
|
||||||
: lay::Browser (root, vw),
|
: lay::Browser (root, vw),
|
||||||
Ui::ClipDialog ()
|
Ui::ClipDialog ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ class ClipDialog
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ClipDialog (lay::Dispatcher *root, lay::LayoutView *view);
|
ClipDialog (lay::Dispatcher *root, lay::LayoutViewBase *view);
|
||||||
~ClipDialog ();
|
~ClipDialog ();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ public:
|
||||||
menu_entries.push_back (lay::menu_item ("fill_tool::show", "fill_tool:edit_mode", "edit_menu.utils_menu.end", tl::to_string (QObject::tr ("Fill Tool"))));
|
menu_entries.push_back (lay::menu_item ("fill_tool::show", "fill_tool:edit_mode", "edit_menu.utils_menu.end", tl::to_string (QObject::tr ("Fill Tool"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutView *view) const
|
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
return new FillDialog (root, view);
|
return new FillDialog (root, view);
|
||||||
}
|
}
|
||||||
|
|
@ -73,8 +73,8 @@ static tl::RegisteredClass<lay::PluginDeclaration> config_decl (new FillDialogPl
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
|
|
||||||
FillDialog::FillDialog (lay::Dispatcher *main, lay::LayoutView *view)
|
FillDialog::FillDialog (lay::Dispatcher *main, LayoutViewBase *view)
|
||||||
: QDialog (view),
|
: QDialog (view->widget ()),
|
||||||
lay::Plugin (main),
|
lay::Plugin (main),
|
||||||
Ui::FillDialog (),
|
Ui::FillDialog (),
|
||||||
mp_view (view)
|
mp_view (view)
|
||||||
|
|
@ -315,8 +315,9 @@ FillDialog::get_fill_parameters ()
|
||||||
|
|
||||||
} else if (layer_spec_cbx->currentIndex () == 2) {
|
} else if (layer_spec_cbx->currentIndex () == 2) {
|
||||||
|
|
||||||
// selected layers
|
// get selected layers
|
||||||
std::vector<lay::LayerPropertiesConstIterator> s = mp_view->selected_layers ();
|
std::vector<lay::LayerPropertiesConstIterator> s = mp_view->selected_layers ();
|
||||||
|
|
||||||
for (std::vector<lay::LayerPropertiesConstIterator>::const_iterator l = s.begin (); l != s.end (); ++l) {
|
for (std::vector<lay::LayerPropertiesConstIterator>::const_iterator l = s.begin (); l != s.end (); ++l) {
|
||||||
if (! (*l)->has_children () && cv->layout ().is_valid_layer ((*l)->layer_index ())) {
|
if (! (*l)->has_children () && cv->layout ().is_valid_layer ((*l)->layer_index ())) {
|
||||||
fp.exclude_layers.push_back (cv->layout ().get_properties ((*l)->layer_index ()));
|
fp.exclude_layers.push_back (cv->layout ().get_properties ((*l)->layer_index ()));
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ class LAY_PUBLIC FillDialog
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FillDialog (lay::Dispatcher *root, lay::LayoutView *view);
|
FillDialog (lay::Dispatcher *root, lay::LayoutViewBase *view);
|
||||||
~FillDialog ();
|
~FillDialog ();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
@ -95,7 +95,7 @@ private:
|
||||||
void generate_fill (const FillParameters &fp);
|
void generate_fill (const FillParameters &fp);
|
||||||
FillParameters get_fill_parameters ();
|
FillParameters get_fill_parameters ();
|
||||||
|
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#include "layCommon.h"
|
#include "layCommon.h"
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
#include "lymMacro.h"
|
#include "lymMacroCollection.h"
|
||||||
#include "tlObject.h"
|
#include "tlObject.h"
|
||||||
#include "tlDeferredExecution.h"
|
#include "tlDeferredExecution.h"
|
||||||
#include "tlFileSystemWatcher.h"
|
#include "tlFileSystemWatcher.h"
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#define HDR_layMacroEditorSetupPage
|
#define HDR_layMacroEditorSetupPage
|
||||||
|
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
|
#include "layPluginConfigPage.h"
|
||||||
#include "ui_MacroEditorSetupPage.h"
|
#include "ui_MacroEditorSetupPage.h"
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
#include "layMacroEditorTree.h"
|
#include "layMacroEditorTree.h"
|
||||||
#include "layMacroEditorDialog.h"
|
#include "layMacroEditorDialog.h"
|
||||||
#include "lymMacro.h"
|
#include "lymMacroCollection.h"
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
#include "tlInternational.h"
|
#include "tlInternational.h"
|
||||||
#include "tlException.h"
|
#include "tlException.h"
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
|
#include "layPluginConfigPage.h"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,7 @@ MainWindow::MainWindow (QApplication *app, const char *name, bool undo_enabled)
|
||||||
: QMainWindow (0),
|
: QMainWindow (0),
|
||||||
tl::Object (),
|
tl::Object (),
|
||||||
lay::DispatcherDelegate (),
|
lay::DispatcherDelegate (),
|
||||||
m_dispatcher (this, this),
|
m_dispatcher (this),
|
||||||
m_text_progress (this, 10 /*verbosity threshold*/),
|
m_text_progress (this, 10 /*verbosity threshold*/),
|
||||||
m_mode (std::numeric_limits<unsigned int>::max ()),
|
m_mode (std::numeric_limits<unsigned int>::max ()),
|
||||||
mp_setup_form (0),
|
mp_setup_form (0),
|
||||||
|
|
@ -179,6 +179,8 @@ MainWindow::MainWindow (QApplication *app, const char *name, bool undo_enabled)
|
||||||
mp_app (app),
|
mp_app (app),
|
||||||
m_manager (undo_enabled)
|
m_manager (undo_enabled)
|
||||||
{
|
{
|
||||||
|
m_dispatcher.set_menu_parent_widget (this);
|
||||||
|
|
||||||
// ensures the deferred method scheduler is present
|
// ensures the deferred method scheduler is present
|
||||||
tl::DeferredMethodScheduler::instance ();
|
tl::DeferredMethodScheduler::instance ();
|
||||||
|
|
||||||
|
|
@ -2882,7 +2884,9 @@ MainWindow::close_view (int index)
|
||||||
|
|
||||||
view_closed_event (int (index));
|
view_closed_event (int (index));
|
||||||
|
|
||||||
delete view (index);
|
// delete the view later as it may still be needed by event handlers or similar
|
||||||
|
std::unique_ptr<lay::LayoutView> old_view (view (index));
|
||||||
|
|
||||||
mp_views.erase (mp_views.begin () + index, mp_views.begin () + index + 1);
|
mp_views.erase (mp_views.begin () + index, mp_views.begin () + index + 1);
|
||||||
|
|
||||||
if (index >= int (mp_views.size ())) {
|
if (index >= int (mp_views.size ())) {
|
||||||
|
|
|
||||||
|
|
@ -72,18 +72,18 @@ public:
|
||||||
|
|
||||||
void background_color_changed ()
|
void background_color_changed ()
|
||||||
{
|
{
|
||||||
QColor c = mp_view->background_color ();
|
lay::Color c = mp_view->background_color ();
|
||||||
|
|
||||||
// replace by "real" background color if required
|
// replace by "real" background color if required
|
||||||
if (! c.isValid ()) {
|
if (! c.is_valid ()) {
|
||||||
c = mp_view->palette ().color (QPalette::Normal, QPalette::Base);
|
c = lay::Color (mp_view->palette ().color (QPalette::Normal, QPalette::Base).rgb ());
|
||||||
}
|
}
|
||||||
|
|
||||||
QColor contrast;
|
lay::Color contrast;
|
||||||
if (c.green () > 128) {
|
if (c.to_mono ()) {
|
||||||
contrast = QColor (0, 0, 0);
|
contrast = lay::Color (0, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
contrast = QColor (255, 255, 255);
|
contrast = lay::Color (255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_colors (c, contrast);
|
set_colors (c, contrast);
|
||||||
|
|
@ -388,7 +388,7 @@ public:
|
||||||
widget ()->ungrab_mouse (this);
|
widget ()->ungrab_mouse (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_colors (QColor /*background*/, QColor color)
|
void set_colors (lay::Color /*background*/, lay::Color color)
|
||||||
{
|
{
|
||||||
// set zoom box color
|
// set zoom box color
|
||||||
m_color = color.rgb ();
|
m_color = color.rgb ();
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#define HDR_laySearchReplaceConfigPage
|
#define HDR_laySearchReplaceConfigPage
|
||||||
|
|
||||||
#include "layPlugin.h"
|
#include "layPlugin.h"
|
||||||
|
#include "layPluginConfigPage.h"
|
||||||
#include "laySearchReplaceDialog.h"
|
#include "laySearchReplaceDialog.h"
|
||||||
|
|
||||||
#include "ui_SearchReplaceConfigPage.h"
|
#include "ui_SearchReplaceConfigPage.h"
|
||||||
|
|
|
||||||
|
|
@ -699,7 +699,7 @@ fill_ctx_cbx (QComboBox *cbx)
|
||||||
cbx->addItem (QObject::tr ("All cells"));
|
cbx->addItem (QObject::tr ("All cells"));
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchReplaceDialog::SearchReplaceDialog (lay::Dispatcher *root, lay::LayoutView *view)
|
SearchReplaceDialog::SearchReplaceDialog (lay::Dispatcher *root, LayoutViewBase *view)
|
||||||
: lay::Browser (root, view),
|
: lay::Browser (root, view),
|
||||||
Ui::SearchReplaceDialog (),
|
Ui::SearchReplaceDialog (),
|
||||||
mp_view (view),
|
mp_view (view),
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ public:
|
||||||
std::string text;
|
std::string text;
|
||||||
};
|
};
|
||||||
|
|
||||||
SearchReplaceDialog (lay::Dispatcher *root, lay::LayoutView *view);
|
SearchReplaceDialog (lay::Dispatcher *root, lay::LayoutViewBase *view);
|
||||||
~SearchReplaceDialog ();
|
~SearchReplaceDialog ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -174,7 +174,7 @@ private:
|
||||||
// implementation of the lay::Plugin interface
|
// implementation of the lay::Plugin interface
|
||||||
void menu_activated (const std::string &symbol);
|
void menu_activated (const std::string &symbol);
|
||||||
|
|
||||||
lay::LayoutView *mp_view;
|
lay::LayoutViewBase *mp_view;
|
||||||
std::vector<std::string> m_mru;
|
std::vector<std::string> m_mru;
|
||||||
std::vector<SavedQuery> m_saved;
|
std::vector<SavedQuery> m_saved;
|
||||||
int m_current_mode;
|
int m_current_mode;
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ public:
|
||||||
menu_entries.push_back (lay::menu_item ("search_replace::show", "search_replace_viewer:edit:view_mode", "edit_menu.utils_group+", tl::to_string (QObject::tr ("Search"))));
|
menu_entries.push_back (lay::menu_item ("search_replace::show", "search_replace_viewer:edit:view_mode", "edit_menu.utils_group+", tl::to_string (QObject::tr ("Search"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutView *view) const
|
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||||
{
|
{
|
||||||
return new SearchReplaceDialog (root, view);
|
return new SearchReplaceDialog (root, view);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -320,7 +320,7 @@ class SearchInstanceProperties
|
||||||
private Ui::SearchPropertiesInstance
|
private Ui::SearchPropertiesInstance
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SearchInstanceProperties (QStackedWidget *sw, lay::LayoutView * /*view*/, int /*cv_index*/)
|
SearchInstanceProperties (QStackedWidget *sw, lay::LayoutViewBase * /*view*/, int /*cv_index*/)
|
||||||
: SearchPropertiesWidget (sw)
|
: SearchPropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -377,7 +377,7 @@ class SearchShapeProperties
|
||||||
protected Ui::SearchPropertiesShape
|
protected Ui::SearchPropertiesShape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SearchShapeProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
SearchShapeProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: SearchPropertiesWidget (sw)
|
: SearchPropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -449,7 +449,7 @@ class SearchPolygonProperties
|
||||||
: public SearchShapeProperties
|
: public SearchShapeProperties
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SearchPolygonProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
SearchPolygonProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: SearchShapeProperties (sw, view, cv_index)
|
: SearchShapeProperties (sw, view, cv_index)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
|
|
@ -518,7 +518,7 @@ class SearchBoxProperties
|
||||||
private Ui::SearchPropertiesBox
|
private Ui::SearchPropertiesBox
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SearchBoxProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
SearchBoxProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: SearchPropertiesWidget (sw)
|
: SearchPropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -593,7 +593,7 @@ class SearchPathProperties
|
||||||
private Ui::SearchPropertiesPath
|
private Ui::SearchPropertiesPath
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SearchPathProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
SearchPathProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: SearchPropertiesWidget (sw)
|
: SearchPropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -666,7 +666,7 @@ class SearchTextProperties
|
||||||
private Ui::SearchPropertiesText
|
private Ui::SearchPropertiesText
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SearchTextProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
SearchTextProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: SearchPropertiesWidget (sw)
|
: SearchPropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -748,7 +748,7 @@ class ReplaceInstanceProperties
|
||||||
private Ui::ReplacePropertiesInstance
|
private Ui::ReplacePropertiesInstance
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReplaceInstanceProperties (QStackedWidget *sw, lay::LayoutView * /*view*/, int /*cv_index*/)
|
ReplaceInstanceProperties (QStackedWidget *sw, lay::LayoutViewBase * /*view*/, int /*cv_index*/)
|
||||||
: ReplacePropertiesWidget (sw)
|
: ReplacePropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -787,7 +787,7 @@ class ReplaceShapeProperties
|
||||||
protected Ui::ReplacePropertiesShape
|
protected Ui::ReplacePropertiesShape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReplaceShapeProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
ReplaceShapeProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: ReplacePropertiesWidget (sw)
|
: ReplacePropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -828,7 +828,7 @@ class ReplacePolygonProperties
|
||||||
: public ReplaceShapeProperties
|
: public ReplaceShapeProperties
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReplacePolygonProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
ReplacePolygonProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: ReplaceShapeProperties (sw, view, cv_index)
|
: ReplaceShapeProperties (sw, view, cv_index)
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
|
|
@ -867,7 +867,7 @@ class ReplaceBoxProperties
|
||||||
private Ui::ReplacePropertiesBox
|
private Ui::ReplacePropertiesBox
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReplaceBoxProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
ReplaceBoxProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: ReplacePropertiesWidget (sw)
|
: ReplacePropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -919,7 +919,7 @@ class ReplacePathProperties
|
||||||
private Ui::ReplacePropertiesPath
|
private Ui::ReplacePropertiesPath
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReplacePathProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
ReplacePathProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: ReplacePropertiesWidget (sw)
|
: ReplacePropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -966,7 +966,7 @@ class ReplaceTextProperties
|
||||||
private Ui::ReplacePropertiesText
|
private Ui::ReplacePropertiesText
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReplaceTextProperties (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
ReplaceTextProperties (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
: ReplacePropertiesWidget (sw)
|
: ReplacePropertiesWidget (sw)
|
||||||
{
|
{
|
||||||
setupUi (this);
|
setupUi (this);
|
||||||
|
|
@ -1018,7 +1018,7 @@ public:
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
void fill_find_pages (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
void fill_find_pages (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
{
|
{
|
||||||
while (sw->count () > 0) {
|
while (sw->count () > 0) {
|
||||||
sw->removeWidget (sw->widget (0));
|
sw->removeWidget (sw->widget (0));
|
||||||
|
|
@ -1031,7 +1031,7 @@ void fill_find_pages (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
||||||
sw->addWidget (new SearchTextProperties (sw, view, cv_index));
|
sw->addWidget (new SearchTextProperties (sw, view, cv_index));
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_replace_pages (QStackedWidget *sw, lay::LayoutView *view, int cv_index)
|
void fill_replace_pages (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index)
|
||||||
{
|
{
|
||||||
while (sw->count () > 0) {
|
while (sw->count () > 0) {
|
||||||
sw->removeWidget (sw->widget (0));
|
sw->removeWidget (sw->widget (0));
|
||||||
|
|
|
||||||
|
|
@ -86,12 +86,12 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Fill the given stack widget with pairs of items plus properties widget
|
* @brief Fill the given stack widget with pairs of items plus properties widget
|
||||||
*/
|
*/
|
||||||
void fill_find_pages (QStackedWidget *sw, lay::LayoutView *view, int cv_index);
|
void fill_find_pages (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Fill the given stack widget with pairs of items plus properties widget
|
* @brief Fill the given stack widget with pairs of items plus properties widget
|
||||||
*/
|
*/
|
||||||
void fill_replace_pages (QStackedWidget *sw, lay::LayoutView *view, int cv_index);
|
void fill_replace_pages (QStackedWidget *sw, lay::LayoutViewBase *view, int cv_index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get an object id from a page index
|
* @brief Get an object id from a page index
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
|
|
||||||
#include "layMainWindow.h"
|
#include "layMainWindow.h"
|
||||||
#include "layApplication.h"
|
#include "layApplication.h"
|
||||||
|
#include "layPluginConfigPage.h"
|
||||||
#include "tlExceptions.h"
|
#include "tlExceptions.h"
|
||||||
#include "tlLog.h"
|
#include "tlLog.h"
|
||||||
#include "dbHershey.h"
|
#include "dbHershey.h"
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ SOURCES = \
|
||||||
laySalt.cc \
|
laySalt.cc \
|
||||||
laySessionTests.cc
|
laySessionTests.cc
|
||||||
|
|
||||||
INCLUDEPATH += $$LAY_INC $$TL_INC $$LAYBASIC_INC $$DB_INC $$GSI_INC $$ANT_INC $$IMG_INC $$RDB_INC
|
INCLUDEPATH += $$LAY_INC $$TL_INC $$LAYBASIC_INC $$LAYUI_INC $$LAYVIEW_INC $$DB_INC $$GSI_INC $$ANT_INC $$IMG_INC $$RDB_INC
|
||||||
DEPENDPATH += $$LAY_INC $$TL_INC $$LAYBASIC_INC $$DB_INC $$GSI_INC $$ANT_INC $$IMG_INC $$RDB_INC
|
DEPENDPATH += $$LAY_INC $$TL_INC $$LAYBASIC_INC $$LAYUI_INC $$LAYVIEW_INC $$DB_INC $$GSI_INC $$ANT_INC $$IMG_INC $$RDB_INC
|
||||||
|
|
||||||
LIBS += -L$$DESTDIR_UT -lklayout_lay -lklayout_laybasic -lklayout_db -lklayout_tl -lklayout_gsi -lklayout_ant -lklayout_img -lklayout_rdb
|
LIBS += -L$$DESTDIR_UT -lklayout_lay -lklayout_laybasic -lklayout_layui -lklayout_layview -lklayout_db -lklayout_tl -lklayout_gsi -lklayout_ant -lklayout_img -lklayout_rdb
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@
|
||||||
|
|
||||||
|
|
||||||
#include "gsiDecl.h"
|
#include "gsiDecl.h"
|
||||||
#include "layLayoutView.h"
|
#include "layLayerProperties.h"
|
||||||
|
#include "layLayoutViewBase.h"
|
||||||
|
|
||||||
namespace gsi
|
namespace gsi
|
||||||
{
|
{
|
||||||
|
|
@ -1221,11 +1222,6 @@ Class<lay::LayerPropertiesNode> decl_LayerPropertiesNode (
|
||||||
"\n"
|
"\n"
|
||||||
"@return A bbox in micron units\n"
|
"@return A bbox in micron units\n"
|
||||||
) +
|
) +
|
||||||
method ("view", &lay::LayerPropertiesNode::view,
|
|
||||||
"@brief Gets the view this node lives in\n"
|
|
||||||
"\n"
|
|
||||||
"This reference can be nil if the node is a orphan node that lives outside a view."
|
|
||||||
) +
|
|
||||||
method ("list_index", &lay::LayerPropertiesNode::list_index,
|
method ("list_index", &lay::LayerPropertiesNode::list_index,
|
||||||
"@brief Gets the index of the layer properties list that the node lives in\n"
|
"@brief Gets the index of the layer properties list that the node lives in\n"
|
||||||
) +
|
) +
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue