2021-03-02 20:33:24 +03:00
/*
* Copyright 2021 Michail Vourlakos < mvourlakos @ gmail . com >
*
*
* This file is part of Latte - Dock and is a Fork of PlasmaCore : : IconItem
*
* Latte - Dock 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 .
*
* Latte - Dock is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty 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 , see < http : //www.gnu.org/licenses/>.
*/
# ifndef CONTAINMENTLAYOUTMANAGER_H
# define CONTAINMENTLAYOUTMANAGER_H
//Qt
2021-03-05 12:11:12 +03:00
# include <QMetaMethod>
2021-03-02 20:33:24 +03:00
# include <QObject>
2021-03-03 21:17:58 +03:00
# include <QQmlPropertyMap>
2021-03-02 20:33:24 +03:00
# include <QQuickItem>
2021-03-05 12:11:12 +03:00
namespace KDeclarative {
class ConfigPropertyMap ;
}
2021-03-02 20:33:24 +03:00
namespace Latte {
namespace Containment {
class LayoutManager : public QObject
{
Q_OBJECT
2021-03-03 21:17:58 +03:00
Q_PROPERTY ( QObject * plasmoidObj READ plasmoid ( ) WRITE setPlasmoid NOTIFY plasmoidChanged )
Q_PROPERTY ( QQuickItem * rootItem READ rootItem WRITE setRootItem NOTIFY rootItemChanged )
2021-03-02 20:33:24 +03:00
Q_PROPERTY ( QQuickItem * mainLayout READ mainLayout WRITE setMainLayout NOTIFY mainLayoutChanged )
Q_PROPERTY ( QQuickItem * startLayout READ startLayout WRITE setStartLayout NOTIFY startLayoutChanged )
Q_PROPERTY ( QQuickItem * endLayout READ endLayout WRITE setEndLayout NOTIFY endLayoutChanged )
2021-03-04 20:39:11 +03:00
Q_PROPERTY ( QQuickItem * dndSpacerItem READ dndSpacer WRITE setDndSpacer NOTIFY dndSpacerChanged )
2021-03-03 21:17:58 +03:00
Q_PROPERTY ( QQuickItem * metrics READ metrics WRITE setMetrics NOTIFY metricsChanged )
2021-03-05 12:11:12 +03:00
//! this is the only way I have found to write their values properly in the configuration file in Multiple mode
//! if they are not used from qml side in the form of plasmoid.configuration..... then
//! appletsOrder is not stored when needed and applets additions/removals are not valid on next startup
Q_PROPERTY ( int splitterPosition READ splitterPosition NOTIFY splitterPositionChanged )
Q_PROPERTY ( int splitterPosition2 READ splitterPosition2 NOTIFY splitterPosition2Changed )
Q_PROPERTY ( QString appletOrder READ appletOrder NOTIFY appletOrderChanged )
2021-03-06 12:32:26 +03:00
Q_PROPERTY ( QString lockedZoomApplets READ lockedZoomApplets NOTIFY lockedZoomAppletsChanged )
2021-03-05 12:11:12 +03:00
2021-03-02 20:33:24 +03:00
public :
LayoutManager ( QObject * parent = nullptr ) ;
2021-03-05 12:11:12 +03:00
int splitterPosition ( ) const ;
int splitterPosition2 ( ) const ;
QString appletOrder ( ) const ;
2021-03-06 12:32:26 +03:00
QString lockedZoomApplets ( ) const ;
2021-03-05 12:11:12 +03:00
2021-03-03 21:17:58 +03:00
QObject * plasmoid ( ) const ;
void setPlasmoid ( QObject * plasmoid ) ;
QQuickItem * rootItem ( ) const ;
void setRootItem ( QQuickItem * root ) ;
2021-03-02 20:33:24 +03:00
QQuickItem * mainLayout ( ) const ;
void setMainLayout ( QQuickItem * main ) ;
QQuickItem * startLayout ( ) const ;
void setStartLayout ( QQuickItem * start ) ;
QQuickItem * endLayout ( ) const ;
void setEndLayout ( QQuickItem * end ) ;
2021-03-04 20:39:11 +03:00
QQuickItem * dndSpacer ( ) const ;
void setDndSpacer ( QQuickItem * dnd ) ;
2021-03-03 21:17:58 +03:00
QQuickItem * metrics ( ) const ;
void setMetrics ( QQuickItem * metrics ) ;
2021-03-02 20:33:24 +03:00
public slots :
2021-03-05 12:11:12 +03:00
Q_INVOKABLE void restore ( ) ;
Q_INVOKABLE void save ( ) ;
2021-03-06 12:01:14 +03:00
Q_INVOKABLE void addJustifySplittersInMainLayout ( ) ;
Q_INVOKABLE void moveAppletsBasedOnJustifyAlignment ( ) ;
2021-03-04 11:50:20 +03:00
Q_INVOKABLE void joinLayoutsToMainLayout ( ) ;
2021-03-03 21:28:46 +03:00
Q_INVOKABLE void insertBefore ( QQuickItem * hoveredItem , QQuickItem * item ) ;
Q_INVOKABLE void insertAfter ( QQuickItem * hoveredItem , QQuickItem * item ) ;
2021-03-03 21:17:58 +03:00
Q_INVOKABLE void insertAtCoordinates ( QQuickItem * item , const int & x , const int & y ) ;
2021-03-02 20:33:24 +03:00
signals :
2021-03-05 12:11:12 +03:00
void appletOrderChanged ( ) ;
2021-03-03 21:17:58 +03:00
void plasmoidChanged ( ) ;
void rootItemChanged ( ) ;
2021-03-04 20:39:11 +03:00
void dndSpacerChanged ( ) ;
2021-03-06 12:32:26 +03:00
void lockedZoomAppletsChanged ( ) ;
2021-03-02 20:33:24 +03:00
void mainLayoutChanged ( ) ;
2021-03-03 21:17:58 +03:00
void metricsChanged ( ) ;
2021-03-05 12:11:12 +03:00
void splitterPositionChanged ( ) ;
void splitterPosition2Changed ( ) ;
2021-03-02 20:33:24 +03:00
void startLayoutChanged ( ) ;
void endLayoutChanged ( ) ;
2021-03-05 12:11:12 +03:00
private slots :
void onRootItemChanged ( ) ;
2021-03-06 11:28:28 +03:00
void destroyJustifySplitters ( ) ;
2021-03-02 20:33:24 +03:00
private :
2021-03-05 12:11:12 +03:00
void setSplitterPosition ( const int & position ) ;
void setSplitterPosition2 ( const int & position ) ;
void setAppletOrder ( const QString & order ) ;
2021-03-06 12:32:26 +03:00
void setLockedZoomApplets ( const QString & applets ) ;
2021-03-05 12:11:12 +03:00
2021-03-05 13:54:53 +03:00
bool isValidApplet ( const int & id ) ;
2021-03-03 21:17:58 +03:00
bool insertAtLayoutCoordinates ( QQuickItem * layout , QQuickItem * item , int x , int y ) ;
private :
2021-03-05 12:11:12 +03:00
int m_splitterPosition { - 1 } ;
int m_splitterPosition2 { - 1 } ;
QString m_appletOrder ;
2021-03-06 12:32:26 +03:00
QString m_lockedZoomApplets ;
2021-03-05 12:11:12 +03:00
2021-03-03 21:17:58 +03:00
QQuickItem * m_rootItem { nullptr } ;
2021-03-04 20:39:11 +03:00
QQuickItem * m_dndSpacer { nullptr } ;
2021-03-03 21:17:58 +03:00
2021-03-02 20:33:24 +03:00
QQuickItem * m_mainLayout { nullptr } ;
QQuickItem * m_startLayout { nullptr } ;
QQuickItem * m_endLayout { nullptr } ;
2021-03-03 21:17:58 +03:00
QQuickItem * m_metrics { nullptr } ;
2021-03-02 20:33:24 +03:00
2021-03-03 21:17:58 +03:00
QObject * m_plasmoid { nullptr } ;
2021-03-05 12:11:12 +03:00
KDeclarative : : ConfigPropertyMap * m_configuration { nullptr } ;
QMetaMethod m_createAppletItemMethod ;
QMetaMethod m_createJustifySplitterMethod ;
2021-03-02 20:33:24 +03:00
} ;
}
}
# endif // CONTAINMENTLAYOUTMANAGER_H