File indexing completed on 2024-04-14 15:37:13
0001 /* 0002 * Copyright 2019 Michail Vourlakos <mvourlakos@gmail.com> 0003 * 0004 * This file is part of Latte-Dock 0005 * 0006 * Latte-Dock is free software; you can redistribute it and/or 0007 * modify it under the terms of the GNU General Public License as 0008 * published by the Free Software Foundation; either version 2 of 0009 * the License, or (at your option) any later version. 0010 * 0011 * Latte-Dock is distributed in the hope that it will be useful, 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 * GNU General Public License for more details. 0015 * 0016 * You should have received a copy of the GNU General Public License 0017 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0018 */ 0019 0020 #include "sharedlayout.h" 0021 0022 // local 0023 #include "centrallayout.h" 0024 #include "../lattecorona.h" 0025 #include "../screenpool.h" 0026 #include "../layouts/manager.h" 0027 #include "../view/view.h" 0028 0029 namespace Latte { 0030 0031 SharedLayout::SharedLayout(CentralLayout *assigned, QObject *parent, QString layoutFile, QString layoutName) 0032 : Layout::GenericLayout (parent, layoutFile, layoutName) 0033 { 0034 initToCorona(assigned->corona()); 0035 0036 connect(m_corona->layoutsManager(), &Layouts::Manager::currentLayoutNameChanged, this, &SharedLayout::updateLastUsedCentralLayout); 0037 0038 addCentralLayout(assigned); 0039 updateLastUsedCentralLayout(); 0040 } 0041 0042 0043 SharedLayout::~SharedLayout() 0044 { 0045 qDebug() << " SHARED LAYOUT destroying ::: " << name(); 0046 } 0047 0048 bool SharedLayout::isCurrent() const 0049 { 0050 for (const auto &layout : m_centralLayouts) { 0051 if (layout->isCurrent()) { 0052 return true; 0053 } 0054 } 0055 0056 return false; 0057 } 0058 0059 Layout::Type SharedLayout::type() const 0060 { 0061 return Layout::Type::Shared; 0062 } 0063 0064 0065 const QStringList SharedLayout::appliedActivities() 0066 { 0067 if (!m_corona) { 0068 return {}; 0069 } 0070 0071 QStringList activities; 0072 0073 for (const auto &layout : m_centralLayouts) { 0074 activities << layout->appliedActivities(); 0075 } 0076 0077 return activities; 0078 } 0079 0080 void SharedLayout::updateLastUsedCentralLayout() 0081 { 0082 for (const auto &layout : m_centralLayouts) { 0083 if (layout->isCurrent()) { 0084 m_lastUsedCentralLayout = layout->name(); 0085 break; 0086 } 0087 } 0088 } 0089 0090 CentralLayout *SharedLayout::currentCentralLayout() const 0091 { 0092 //! first the current active one 0093 for (const auto &layout : m_centralLayouts) { 0094 if (layout->isCurrent()) { 0095 return layout; 0096 } 0097 } 0098 0099 //! the last used 0100 for (const auto &layout : m_centralLayouts) { 0101 if (layout->name() == m_lastUsedCentralLayout) { 0102 return layout; 0103 } 0104 } 0105 0106 return nullptr; 0107 } 0108 0109 void SharedLayout::addCentralLayout(CentralLayout *layout) 0110 { 0111 if (layout != nullptr && !m_centralLayouts.contains(layout)) { 0112 m_centralLayouts.append(layout); 0113 0114 qDebug() << " ADDING Central : " << layout->name() << " at Shared: " << name(); 0115 connect(layout, &GenericLayout::activitiesChanged, this, &GenericLayout::activitiesChanged); 0116 emit activitiesChanged(); 0117 emit viewsCountChanged(); 0118 0119 updateLastUsedActivity(); 0120 } 0121 } 0122 0123 void SharedLayout::removeCentralLayout(CentralLayout *layout) 0124 { 0125 if (m_centralLayouts.contains(layout)) { 0126 qDebug() << "SHAREDLAYOUT <" << name() << "> : Removing active layout, " << layout->name(); 0127 m_centralLayouts.removeAll(layout); 0128 0129 disconnect(layout, &GenericLayout::activitiesChanged, this, &GenericLayout::activitiesChanged); 0130 0131 if (m_centralLayouts.count() > 0) { 0132 emit activitiesChanged(); 0133 } else { 0134 //! all assigned layouts have been unloaded so the shared layout should be destroyed also 0135 emit layoutDestroyed(this); 0136 } 0137 0138 //! viewsCount signal is not needed to be trigerred here because 0139 //! in such case the views number has not been changed for the rest 0140 //! active layouts 0141 } 0142 } 0143 0144 //! OVERRIDE 0145 int SharedLayout::viewsCount(int screen) const 0146 { 0147 if (!m_corona) { 0148 return 0; 0149 } 0150 0151 CentralLayout *current = currentCentralLayout(); 0152 0153 if (current) { 0154 return current->viewsCount(screen); 0155 } 0156 0157 return Layout::GenericLayout::viewsCount(screen); 0158 } 0159 0160 int SharedLayout::viewsCount(QScreen *screen) const 0161 { 0162 if (!m_corona) { 0163 return 0; 0164 } 0165 0166 CentralLayout *current = currentCentralLayout(); 0167 0168 if (current) { 0169 return current->viewsCount(screen); 0170 } 0171 0172 return Layout::GenericLayout::viewsCount(screen);; 0173 } 0174 0175 int SharedLayout::viewsCount() const 0176 { 0177 if (!m_corona) { 0178 return 0; 0179 } 0180 0181 CentralLayout *current = currentCentralLayout(); 0182 0183 if (current) { 0184 return current->viewsCount(); 0185 } 0186 0187 return Layout::GenericLayout::viewsCount(); 0188 } 0189 0190 QList<Plasma::Types::Location> SharedLayout::availableEdgesForView(QScreen *scr, Latte::View *forView) const 0191 { 0192 /* using Plasma::Types; 0193 QList<Types::Location> edges{Types::BottomEdge, Types::LeftEdge, 0194 Types::TopEdge, Types::RightEdge}; 0195 0196 if (!m_corona) { 0197 return edges; 0198 }*/ 0199 0200 return Layout::GenericLayout::availableEdgesForView(scr, forView); 0201 } 0202 0203 QList<Plasma::Types::Location> SharedLayout::freeEdges(QScreen *scr) const 0204 { 0205 /* using Plasma::Types; 0206 QList<Types::Location> edges{Types::BottomEdge, Types::LeftEdge, 0207 Types::TopEdge, Types::RightEdge}; 0208 0209 if (!m_corona) { 0210 return edges; 0211 } 0212 0213 CentralLayout *current = currentCentralLayout(); 0214 0215 if (current) { 0216 return current->freeEdges(scr); 0217 }*/ 0218 0219 return Layout::GenericLayout::freeEdges(scr); 0220 } 0221 0222 QList<Plasma::Types::Location> SharedLayout::freeEdges(int screen) const 0223 { 0224 /* using Plasma::Types; 0225 QList<Types::Location> edges{Types::BottomEdge, Types::LeftEdge, 0226 Types::TopEdge, Types::RightEdge}; 0227 0228 if (!m_corona) { 0229 return edges; 0230 } 0231 0232 CentralLayout *current = currentCentralLayout(); 0233 0234 if (current) { 0235 return current->freeEdges(screen); 0236 }*/ 0237 0238 return Layout::GenericLayout::freeEdges(screen); 0239 } 0240 0241 void SharedLayout::setLastConfigViewFor(Latte::View *view) 0242 { 0243 CentralLayout *current = currentCentralLayout(); 0244 0245 if (current) { 0246 return current->setLastConfigViewFor(view); 0247 } 0248 0249 return GenericLayout::setLastConfigViewFor(view); 0250 } 0251 0252 Latte::View *SharedLayout::lastConfigViewFor() 0253 { 0254 CentralLayout *current = currentCentralLayout(); 0255 0256 if (current) { 0257 return current->lastConfigViewFor(); 0258 } 0259 0260 return GenericLayout::lastConfigViewFor(); 0261 } 0262 0263 QList<Latte::View *> SharedLayout::sortedLatteViews(QList<Latte::View *> views) 0264 { 0265 CentralLayout *current = currentCentralLayout(); 0266 0267 if (current) { 0268 return current->sortedLatteViews(); 0269 } 0270 0271 return Layout::GenericLayout::sortedLatteViews(); 0272 } 0273 0274 }