9 #include "columnview.h" 11 #include <QQmlPropertyMap> 13 #include <QRandomGenerator> 15 static std::map<quint32, QVariant> s_knownVariants;
18 class ParsedRoute :
public QObject 39 if (newItem !=
nullptr) {
46 QVariantMap properties = QVariantMap(),
51 , properties(properties)
56 virtual ~ParsedRoute()
64 for (
auto i = s_knownVariants.begin(); i != s_knownVariants.end(); i++) {
65 if (i->second == data) {
70 while (s_knownVariants.count(number) > 0) {
73 s_knownVariants[
number] = data;
76 bool equals(
const ParsedRoute *rhs,
bool countItem =
false)
79 return name == rhs->name
81 && (!countItem || item == rhs->item)
82 && cache == rhs->cache;
95 auto ret = items.
take(key);
102 for (
auto cost : qAsConst(costs)) {
107 void setSize(
int size = 10)
114 while (size < totalCosts()) {
115 auto key = evictionList.
last();
116 auto item = items.
take(key);
125 auto item = items.
take(key);
127 if (item != newItem) {
132 items[key] = newItem;
159 Q_PROPERTY(
QJSValue route MEMBER m_route WRITE setRoute NOTIFY changed)
167 Q_PROPERTY(
bool when MEMBER m_when NOTIFY changed)
185 connect(
this, &PreloadRouteGroup::changed,
this, &PreloadRouteGroup::handleChange);
187 Q_SIGNAL
void changed();
208 Q_PROPERTY(
QString name MEMBER m_name READ name)
233 Q_PROPERTY(
bool cache MEMBER m_cache READ cache)
241 Q_PROPERTY(
int cost MEMBER m_cost)
243 Q_CLASSINFO("DefaultProperty", "component")
246 void preloadDataChanged();
247 void preloadChanged();
252 bool m_cache = false;
345 Q_CLASSINFO("DefaultProperty", "routes")
357 Q_PROPERTY(
QJSValue initialRoute READ initialRoute WRITE setInitialRoute NOTIFY initialRouteChanged)
371 Q_PROPERTY(
ColumnView *pageStack MEMBER m_pageStack NOTIFY pageStackChanged)
378 Q_PROPERTY(
int cacheCapacity READ cacheCapacity WRITE setCacheCapacity)
385 Q_PROPERTY(
int preloadedPoolCapacity READ preloadedPoolCapacity WRITE setPreloadedPoolCapacity)
409 void reevaluateParamMapProperties();
441 QList<ParsedRoute *> m_currentRoutes;
463 void push(ParsedRoute *route);
470 bool routesContainsKey(const
QString &key) const;
486 bool routesCacheForKey(const
QString &key) const;
494 int routesCostForKey(const
QString &key) const;
496 void preload(ParsedRoute *route);
497 void unpreload(ParsedRoute *route);
499 void placeInCache(ParsedRoute *route);
507 bool isActive(
QObject *
object);
508 void pushFromObject(
QObject *
object,
QJSValue route,
bool replace = false);
512 friend class ParsedRoute;
515 void classBegin() override;
516 void componentComplete() override;
526 return m_paramMap.data();
530 void setInitialRoute(
QJSValue initialRoute);
532 int cacheCapacity()
const 536 void setCacheCapacity(
int size)
538 m_cache.setSize(size);
541 int preloadedPoolCapacity()
const 543 return m_preload.size;
545 void setPreloadedPoolCapacity(
int size)
547 m_preload.setSize(size);
578 Q_INVOKABLE
void navigateToRoute(
QJSValue route);
602 Q_INVOKABLE
bool routeActive(
QJSValue route);
620 Q_INVOKABLE
void pushRoute(
QJSValue route);
635 Q_INVOKABLE
void popRoute();
665 Q_INVOKABLE
void bringToView(
QJSValue route);
672 Q_INVOKABLE
QJSValue currentRoutes()
const;
677 void routesChanged();
678 void initialRouteChanged();
679 void pageStackChanged();
680 void currentIndexChanged();
681 void navigationChanged();
694 Q_PROPERTY(
PageRouter *router READ router WRITE setRouter NOTIFY routerChanged)
699 Q_PROPERTY(
QVariant data READ data MEMBER m_data NOTIFY dataChanged)
705 Q_PROPERTY(
bool isCurrent READ isCurrent NOTIFY isCurrentChanged)
712 Q_PROPERTY(
QJSValue watchedRoute READ watchedRoute WRITE setWatchedRoute NOTIFY watchedRouteChanged)
722 Q_PROPERTY(
bool watchedRouteActive READ watchedRouteActive NOTIFY navigationChanged)
736 friend class ParsedRoute;
739 PreloadRouteGroup *preload()
const 750 Q_EMIT routerChanged();
753 bool isCurrent()
const;
755 Q_INVOKABLE
void navigateToRoute(
QJSValue route);
757 Q_INVOKABLE
bool routeActive(
QJSValue route);
759 Q_INVOKABLE
void pushRoute(
QJSValue route);
761 Q_INVOKABLE
void popRoute();
763 Q_INVOKABLE
void bringToView(
QJSValue route);
774 Q_INVOKABLE
void pushFromHere(
QJSValue route);
785 Q_INVOKABLE
void popFromHere();
792 Q_INVOKABLE
void replaceFromHere(
QJSValue route);
793 bool watchedRouteActive();
794 void setWatchedRoute(
QJSValue route);
798 void routerChanged();
800 void isCurrentChanged();
801 void navigationChanged();
802 void watchedRouteChanged();
805 QML_DECLARE_TYPEINFO(
PageRouter, QML_HAS_ATTACHED_PROPERTIES)
QString name(const QVariant &location)
bool contains(const Key &key) const const
ColumnView is a container that lays out items horizontally in a row, when not all items fit in the Co...
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
bool insert(Part *part, qint64 *insertId=nullptr)
QRandomGenerator * system()
KIOCORE_EXPORT QString number(KIO::filesize_t size)
int removeAll(const T &value)
Item holding data about when to preload a route.
void prepend(const T &value)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void destroyed(QObject *obj)