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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 50 additions & 2 deletions newmemorylayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@
from qgis.PyQt.QtCore import *
from qgis.PyQt.QtGui import *
from qgis.core import *

from qgis.core import QgsWkbTypes
from .newmemorylayerdialog import NewMemoryLayerDialog
import os
from qgis.PyQt.QtWidgets import QToolBar
from typing import Optional


class NewMemoryLayer:

def __init__(self, iface):
self.iface = iface
self.action = None
Expand All @@ -42,6 +43,7 @@ def __init__(self, iface):
self.translator = QTranslator()
self.translator.load(self.localePath)
QCoreApplication.installTranslator(self.translator)
self.toolbar: Optional[QToolBar] = None

def initGui(self):
self.action = QAction(
Expand All @@ -55,13 +57,59 @@ def initGui(self):
self.iface.newLayerMenu().addAction(self.action)
self.iface.layerToolBar().addAction(self.action)

# Toolbar
if self.toolbar is None:
self.toolbar = QToolBar("NewMemoryLayerToolbar", self.iface.mainWindow())
self.toolbar.setObjectName("NewMemoryLayerToolbar")
self.iface.addToolBar(self.toolbar)

# Add action Point / Line / Polygon
self._add_layer_action(
":images/themes/default/mIconPointLayer.svg",
"Add new point layer",
"Add new point layer...",
QgsWkbTypes.Type.Point,
"Point",
)

self._add_layer_action(
":images/themes/default/mIconLineLayer.svg",
"Add new line layer",
"Add new line layer...",
QgsWkbTypes.Type.LineString,
"Line",
)

self._add_layer_action(
":images/themes/default/mIconPolygonLayer.svg",
"Add new polygon layer",
"Add new polygon layer...",
QgsWkbTypes.Type.Polygon,
"Polygon",
)

def _add_layer_action(self, icon_path, context, text, wkb_type, label):
action = QAction(
QIcon(icon_path),
QCoreApplication.translate(context, text),
self.iface.mainWindow(),
)
action.triggered.connect(
lambda: NewMemoryLayerDialog().generic_add_layer(wkb_type, label, False)
)
self.toolbar.addAction(action)

def unload(self):
if self.action:
self.action.triggered.disconnect(self.run)
self.iface.unregisterMainWindowAction(self.action)
self.iface.newLayerMenu().removeAction(self.action)
self.iface.layerToolBar().removeAction(self.action)

# remove toolbar :
if self.toolbar:
self.toolbar.deleteLater()

def run(self):
if not self.dlg:
self.dlg = NewMemoryLayerDialog()
Expand Down
14 changes: 11 additions & 3 deletions newmemorylayerdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,21 @@ def __init__(self):
button.clicked.connect(lambda clicked, t=geom_type: self.add_layer(t))
self.lyt_geometry_types.addWidget(button, row, col)

def add_layer(self, geom_type: QgsWkbTypes.Type):
def add_layer(self, geom_type):
self.generic_add_layer(
geom_type, self.leName.text(), self.chk_start_edition.isChecked()
)

@classmethod
def generic_add_layer(
self, geom_type: QgsWkbTypes.Type, name: str = None, edit: bool = False
):
layer_wkb_str = QgsWkbTypes.displayString(geom_type)
geomType = f"{layer_wkb_str}?crs={QgsProject.instance().crs().authid()}"
memLay = QgsVectorLayer(geomType, self.leName.text(), "memory")
memLay = QgsVectorLayer(geomType, name, "memory")
QgsProject().instance().addMapLayer(memLay)

if self.chk_start_edition.isChecked():
if edit:
memLay.startEditing()
iface.layerTreeView().setCurrentLayer(memLay)
iface.actionAddFeature().trigger()