QList<QAction *> QgsOgrLayerItem::actions( QWidget *parent ) { QList<QAction *> lst = QgsLayerItem::actions( parent ); // Messages are different for files and tables QString message = mIsSubLayer ? QObject::tr( "Delete Layer “%1”…" ).arg( mName ) : QObject::tr( "Delete File “%1”…" ).arg( mName ); QAction *actionDeleteLayer = new QAction( message, parent ); // IMPORTANT - we need to capture the stuff we need, and then hand the slot // off to a static method. This is because it's possible for this item // to be deleted in the background on us (e.g. by a parent directory refresh) const bool isSubLayer = mIsSubLayer; const QString uri = mUri; const QString name = mName; QPointer< QgsDataItem > parentItem( mParent ); connect( actionDeleteLayer, &QAction::triggered, this, [ isSubLayer, uri, name, parentItem ] { deleteLayer( isSubLayer, uri, name, parentItem ); } ); lst.append( actionDeleteLayer ); return lst; }
bool LayerCache::put(Layer* layer) { if (!layer->isCacheable()) return false; const uint32_t size = layer->getWidth() * layer->getHeight() * 4; // Don't even try to cache a layer that's bigger than the cache if (size < mMaxSize) { // TODO: Use an LRU while (mSize + size > mMaxSize) { size_t position = 0; #if LAYER_REMOVE_BIGGEST_FIRST position = mCache.size() - 1; #endif Layer* victim = mCache.itemAt(position).mLayer; deleteLayer(victim); mCache.removeAt(position); if (kDebugLayers) { ALOGD(" Deleting layer %.2fx%.2f", victim->layer.getWidth(), victim->layer.getHeight()); } } layer->cancelDefer(); LayerEntry entry(layer); mCache.add(entry); mSize += size; layer->state = Layer::kState_InCache; return true; } layer->state = Layer::kState_FailedToCache; return false; }
void LayerTreeHostProxy::syncRemoteContent() { // We enqueue messages and execute them during paint, as they require an active GL context. ensureRootLayer(); while (OwnPtr<LayerTreeMessageToRenderer> nextMessage = m_messagesToRenderer.tryGetMessage()) { switch (nextMessage->type()) { case LayerTreeMessageToRenderer::SetRootLayer: { const SetRootLayerMessageData& data = static_cast<SetRootLayerMessage*>(nextMessage.get())->data(); setRootLayerID(data.layerID); break; } case LayerTreeMessageToRenderer::DeleteLayer: { const DeleteLayerMessageData& data = static_cast<DeleteLayerMessage*>(nextMessage.get())->data(); deleteLayer(data.layerID); break; } case LayerTreeMessageToRenderer::SyncLayerParameters: { const SyncLayerParametersMessageData& data = static_cast<SyncLayerParametersMessage*>(nextMessage.get())->data(); syncLayerParameters(data.layerInfo); break; } case LayerTreeMessageToRenderer::CreateTile: { const CreateTileMessageData& data = static_cast<CreateTileMessage*>(nextMessage.get())->data(); createTile(data.layerID, data.remoteTileID, data.scale); break; } case LayerTreeMessageToRenderer::RemoveTile: { const RemoveTileMessageData& data = static_cast<RemoveTileMessage*>(nextMessage.get())->data(); removeTile(data.layerID, data.remoteTileID); break; } case LayerTreeMessageToRenderer::UpdateTile: { const UpdateTileMessageData& data = static_cast<UpdateTileMessage*>(nextMessage.get())->data(); updateTile(data.layerID, data.remoteTileID, data.sourceRect, data.targetRect, data.image); break; } case LayerTreeMessageToRenderer::CreateImage: { const CreateImageMessageData& data = static_cast<CreateImageMessage*>(nextMessage.get())->data(); createImage(data.imageID, data.image); break; } case LayerTreeMessageToRenderer::DestroyImage: { const CreateImageMessageData& data = static_cast<CreateImageMessage*>(nextMessage.get())->data(); destroyImage(data.imageID); break; } case LayerTreeMessageToRenderer::FlushLayerChanges: flushLayerChanges(); break; } } }
void CoordinatedGraphicsScene::deleteLayers(const Vector<CoordinatedLayerID>& layerIDs) { for (size_t index = 0; index < layerIDs.size(); ++index) deleteLayer(layerIDs[index]); }
void CoordinatedGraphicsScene::deleteLayers(const Vector<CoordinatedLayerID>& layerIDs) { for (auto& layerID : layerIDs) deleteLayer(layerID); }
SCgLayersWidget::SCgLayersWidget(SCgScene* scene, QWidget* parent) : QWidget(parent), mScene(scene) { mToolBar = new QToolBar(this); mToolBar->addAction(QIcon(":/media/icons/add.png"), "Add layout", this, SLOT(createLayer())); mToolBar->addAction(QIcon(":/media/icons/remove.png"), "Delete layout", this, SLOT(deleteLayer())); mToolBar->addAction(QIcon(":/media/icons/enable.png"), "Show all", this, SLOT(showAll())); mToolBar->addAction(QIcon(":/media/icons/disable.png"), "Hide all", this, SLOT(hideAll())); mLayerListView = new QListWidget(this); mLayerListView->setSortingEnabled(true); mLayerListView->setSelectionMode(QAbstractItemView::ExtendedSelection); mLayerListView->setContextMenuPolicy(Qt::CustomContextMenu); QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(mToolBar); layout->addWidget(mLayerListView); setLayout(layout); connect(mScene, SIGNAL(layerAdded(int,QString)), SLOT(addLayer(int,QString))); connect(mScene, SIGNAL(layerRemoved(int)), SLOT(removeLayer(int))); connect(mScene, SIGNAL(currentLayerChanged(int)), this, SLOT(selectLayer(int))); connect(mLayerListView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customContextMenu(QPoint))); connect(mLayerListView, SIGNAL(itemClicked(QListWidgetItem*)), SLOT(selectLayer(QListWidgetItem*))); connect(mLayerListView, SIGNAL(itemDoubleClicked(QListWidgetItem*)), SLOT(selectObjects())); }