Skip to content

Commit

Permalink
First Commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Mariosmsk committed Apr 7, 2019
0 parents commit 9340f6a
Show file tree
Hide file tree
Showing 10 changed files with 1,696 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
@@ -0,0 +1,2 @@

*.pyc
229 changes: 229 additions & 0 deletions QLocklayers.py
@@ -0,0 +1,229 @@
# -*- coding: utf-8 -*-
"""
/***************************************************************************
QLocklayers
A QGIS plugin
This tool can be used to copy the map canvas and place it in the clipboard.
Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
-------------------
begin : 2019-04-07
git sha : $Format:%H$
copyright : (C) 2019 by Marios S. Kyriakou, KIOS Research and Innovation Center of Excellence (KIOS CoE)
email : mariosmsk@gmail.com
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
"""
from PyQt5.QtCore import (QSettings, QTranslator, qVersion, QCoreApplication, Qt, QTimer)
from PyQt5.QtGui import (QIcon, QImage, QFont, QKeySequence)
from PyQt5.QtWidgets import (QAction, QApplication, QMessageBox, QWidget)
from qgis.core import (QgsProject)

# Initialize Qt resources from file resources.py
from .resources import *
# Import the code for the dialog
import os.path


class QLocklayers:
"""QGIS Plugin Implementation."""

def __init__(self, iface):
"""Constructor.
:param iface: An interface instance that will be passed to this class
which provides the hook by which you can manipulate the QGIS
application at run time.
:type iface: QgsInterface
"""
# Save reference to the QGIS interface
self.iface = iface
# initialize plugin directory
self.plugin_dir = os.path.dirname(__file__)
# initialize locale
locale = QSettings().value('locale/userLocale')[0:2]
locale_path = os.path.join(
self.plugin_dir,
'i18n',
'QLocklayers_{}.qm'.format(locale))

if os.path.exists(locale_path):
self.translator = QTranslator()
self.translator.load(locale_path)

if qVersion() > '4.3.3':
QCoreApplication.installTranslator(self.translator)

# Declare instance attributes
self.actions = []
self.menu = self.tr(u'&QLocklayers')

# Check if plugin was started the first time in current QGIS session
# Must be set in initGui() to survive plugin reloads
self.first_start = None

# noinspection PyMethodMayBeStatic
def tr(self, message):
"""Get the translation for a string using Qt translation API.
We implement this ourselves since we do not inherit QObject.
:param message: String for translation.
:type message: str, QString
:returns: Translated version of message.
:rtype: QString
"""
# noinspection PyTypeChecker,PyArgumentList,PyCallByClass
return QCoreApplication.translate('QLocklayers', message)


def add_action(
self,
icon_path,
text,
callback,
enabled_flag=True,
add_to_menu=True,
add_to_toolbar=True,
status_tip=None,
whats_this=None,
shortcut=None,
parent=None):
"""Add a toolbar icon to the toolbar.
:param icon_path: Path to the icon for this action. Can be a resource
path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
:type icon_path: str
:param text: Text that should be shown in menu items for this action.
:type text: str
:param callback: Function to be called when the action is triggered.
:type callback: function
:param enabled_flag: A flag indicating if the action should be enabled
by default. Defaults to True.
:type enabled_flag: bool
:param add_to_menu: Flag indicating whether the action should also
be added to the menu. Defaults to True.
:type add_to_menu: bool
:param add_to_toolbar: Flag indicating whether the action should also
be added to the toolbar. Defaults to True.
:type add_to_toolbar: bool
:param status_tip: Optional text to show in a popup when mouse pointer
hovers over the action.
:type status_tip: str
:param parent: Parent widget for the new action. Defaults None.
:type parent: QWidget
:param whats_this: Optional text to show in the status bar when the
mouse pointer hovers over the action.
:returns: The action that was created. Note that the action is also
added to self.actions list.
:rtype: QAction
"""

icon = QIcon(icon_path)
action = QAction(icon, text, parent)
action.triggered.connect(callback)
action.setEnabled(enabled_flag)

if status_tip is not None:
action.setStatusTip(status_tip)

if whats_this is not None:
action.setWhatsThis(whats_this)

if shortcut is not None:
action.setShortcut(QKeySequence(shortcut))

if add_to_toolbar:
# Adds plugin icon to Plugins toolbar
self.iface.addToolBarIcon(action)

if add_to_menu:
self.iface.addPluginToMenu(
self.menu,
action)

self.actions.append(action)

return action


def initGui(self):
"""Create the menu entries and toolbar icons inside the QGIS GUI."""

icon_path = ':/plugins/QLocklayers/lock.png'
self.add_action(
icon_path,
text=self.tr(u'Lock layers'),
shortcut="Ctrl+R",
callback=self.lock,
parent=self.iface.mainWindow())
icon_path = ':/plugins/QLocklayers/unlock.png'
self.clickPhotos = self.add_action(
icon_path,
text=self.tr(u'Unlock layers'),
shortcut="Ctrl+U",
callback=self.unlock,
parent=self.iface.mainWindow())

def unload(self):
"""Removes the plugin menu item and icon from QGIS GUI."""
for action in self.actions:
self.iface.removePluginMenu(
self.tr(u'&QLocklayers'),
action)
self.iface.removeToolBarIcon(action)

def showMessage(self, title, msg, button):
msgBox = QMessageBox()
msgBox.setIcon(QMessageBox.Information)
msgBox.setWindowTitle(title)
msgBox.setText(msg)
msgBox.setStandardButtons(QMessageBox.Ok)
font = QFont()
font.setPointSize(9)
msgBox.setFont(font)
msgBox.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint)
buttonY = msgBox.button(QMessageBox.Ok)
buttonY.setText(button)
buttonY.setFont(font)
msgBox.exec_()

def lock(self):
"""Run method that performs all the real work"""

# Create the dialog with elements (after translation) and keep reference
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
selectedLayers = self.iface.layerTreeView().selectedLayers()
requieredLayers = QgsProject.instance().requiredLayers()
selectedLayers.extend(requieredLayers)
QgsProject.instance().setRequiredLayers(selectedLayers)
self.showMessage(title='QLocklayers', msg='Lock selected layers succesfull.', button='OK')

def unlock(self):
selectedLayers = self.iface.layerTreeView().selectedLayers()
requieredLayers = QgsProject.instance().requiredLayers()

for lyr in selectedLayers:
try:
requieredLayers.remove(lyr)
except:
pass
QgsProject.instance().setRequiredLayers(requieredLayers)
self.showMessage(title='QLocklayers', msg='Unlock selected layers succesfull.', button='OK')
9 changes: 9 additions & 0 deletions README.md
@@ -0,0 +1,9 @@
<a href="http://www.kios.ucy.ac.cy"><img src="http://www.kios.ucy.ac.cy/templates/favourite/images/kios_logo_hover.png"/><a>

# QLockLayers

QGIS 3 plugin

This tool can be used to lock/unlock selected layers on the project. Using button or shortcut `Ctrl-R` to lock selected layers and using `Ctrl-U` to unlock selected layers.

* [QGIS Cyprus](https://www.facebook.com/qgiscyprus/)
36 changes: 36 additions & 0 deletions __init__.py
@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
"""
/***************************************************************************
QCopycanvas
A QGIS plugin
This tool can be used to copy the map canvas and place it in the clipboard.
Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
-------------------
begin : 2019-04-07
copyright : (C) 2019 by Marios S. Kyriakou, KIOS Research and Innovation Center of Excellence (KIOS CoE)
email : mariosmsk@gmail.com
git sha : $Format:%H$
***************************************************************************/
/***************************************************************************
* *
* 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 script initializes the plugin, making it known to QGIS.
"""


# noinspection PyPep8Naming
def classFactory(iface): # pylint: disable=invalid-name
"""Load QCopycanvas class from file QCopycanvas.
:param iface: A QGIS interface instance.
:type iface: QgsInterface
"""
#
from .QLocklayers import QLocklayers
return QLocklayers(iface)
Binary file added lock.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions metadata.txt
@@ -0,0 +1,39 @@
# This file contains metadata for your plugin. Since
# version 2.0 of QGIS this is the proper way to supply
# information about a plugin. The old method of
# embedding metadata in __init__.py will
# is no longer supported since version 2.0.

# This file should be included when you package your plugin.# Mandatory items:

[general]
name=QLockLayers
qgisMinimumVersion=3.0
description=This tool can be used to lock selected layers on the project.
version=0.1
author=Marios S. Kyriakou, KIOS Research and Innovation Center of Excellence (KIOS CoE)
email=mariosmsk@gmail.com

about=This tool can be used to lock/unlock selected layers on the project. Using button or shortcut `Ctrl-R` to lock selected layers and using `Ctrl-U` to unlock selected layers.

tracker=https://github.com/KIOS-Research/QLocklayers/issues/
repository=https://github.com/KIOS-Research/QLocklayers/
# End of mandatory metadata

# Recommended items:

# Uncomment the following line and add your changelog:
# changelog=

# Tags are comma separated with spaces allowed
tags=python, lock layers, removable

homepage=https://mariosmsk.com/2019/04/07/qlocklayers/
category=Plugins
icon=icon.png
# experimental flag
experimental=False

# deprecated flag (applies to the whole plugin, not just a single version)
deprecated=False

0 comments on commit 9340f6a

Please sign in to comment.