11 #include <QRandomGenerator> 12 #include <QQmlPropertyMap> 13 #include "columnview.h" 15 static std::map<quint32,QVariant> s_knownVariants;
18 class ParsedRoute :
public QObject {
27 void itemDestroyed() {
36 if (newItem !=
nullptr) {
42 : name(name), data(data), properties(properties), cache(cache) {
45 virtual ~ParsedRoute() {
51 for (
auto i = s_knownVariants.begin(); i != s_knownVariants.end(); i++) {
52 if (i->second == data) {
57 while (s_knownVariants.count(number) > 0) {
60 s_knownVariants[
number] = data;
63 bool equals(
const ParsedRoute* rhs,
bool countItem =
false)
65 return name == rhs->name &&
67 (!countItem || item == rhs->item) &&
79 auto ret = items.
take(key);
85 for (
auto cost : qAsConst(costs)) {
90 void setSize(
int size = 10) {
95 while (size < totalCosts()) {
96 auto key = evictionList.
last();
97 auto item = items.
take(key);
105 auto item = items.
take(key);
107 if (item != newItem) {
112 items[key] = newItem;
139 Q_PROPERTY(
QJSValue route MEMBER m_route WRITE setRoute NOTIFY changed)
147 Q_PROPERTY(
bool when MEMBER m_when NOTIFY changed)
162 connect(
this, &PreloadRouteGroup::changed,
this, &PreloadRouteGroup::handleChange);
164 Q_SIGNAL
void changed();
185 Q_PROPERTY(
QString name MEMBER m_name READ name)
210 Q_PROPERTY(
bool cache MEMBER m_cache READ cache)
218 Q_PROPERTY(
int cost MEMBER m_cost)
220 Q_CLASSINFO("DefaultProperty", "component")
223 void preloadDataChanged();
224 void preloadChanged();
229 bool m_cache = false;
234 QString name() {
return m_name; };
235 bool cache() {
return m_cache; };
236 int cost() {
return m_cost; };
310 Q_CLASSINFO("DefaultProperty", "routes")
322 Q_PROPERTY(
QJSValue initialRoute READ initialRoute WRITE setInitialRoute NOTIFY initialRouteChanged)
336 Q_PROPERTY(
ColumnView* pageStack MEMBER m_pageStack NOTIFY pageStackChanged)
343 Q_PROPERTY(
int cacheCapacity READ cacheCapacity WRITE setCacheCapacity)
350 Q_PROPERTY(
int preloadedPoolCapacity READ preloadedPoolCapacity WRITE setPreloadedPoolCapacity)
372 void reevaluateParamMapProperties();
404 QList<ParsedRoute*> m_currentRoutes;
426 void push(ParsedRoute* route);
433 bool routesContainsKey(const
QString &key) const;
449 bool routesCacheForKey(const
QString &key) const;
457 int routesCostForKey(const
QString &key) const;
459 void preload(ParsedRoute *route);
460 void unpreload(ParsedRoute *route);
462 void placeInCache(ParsedRoute *route);
470 bool isActive(
QObject*
object);
471 void pushFromObject(
QObject *
object,
QJSValue route,
bool replace = false);
475 friend class ParsedRoute;
478 void classBegin() override;
479 void componentComplete() override;
490 void setInitialRoute(
QJSValue initialRoute);
492 int cacheCapacity()
const {
return m_cache.size; };
493 void setCacheCapacity(
int size) { m_cache.setSize(size); };
495 int preloadedPoolCapacity()
const {
return m_preload.size; };
496 void setPreloadedPoolCapacity(
int size) { m_preload.setSize(size); };
526 Q_INVOKABLE
void navigateToRoute(
QJSValue route);
550 Q_INVOKABLE
bool routeActive(
QJSValue route);
568 Q_INVOKABLE
void pushRoute(
QJSValue route);
583 Q_INVOKABLE
void popRoute();
613 Q_INVOKABLE
void bringToView(
QJSValue route);
620 Q_INVOKABLE
QJSValue currentRoutes()
const;
625 void routesChanged();
626 void initialRouteChanged();
627 void pageStackChanged();
628 void currentIndexChanged();
629 void navigationChanged();
642 Q_PROPERTY(
PageRouter *router READ router WRITE setRouter NOTIFY routerChanged)
647 Q_PROPERTY(
QVariant data READ data MEMBER m_data NOTIFY dataChanged)
653 Q_PROPERTY(
bool isCurrent READ isCurrent NOTIFY isCurrentChanged)
660 Q_PROPERTY(
QJSValue watchedRoute READ watchedRoute WRITE setWatchedRoute NOTIFY watchedRouteChanged)
670 Q_PROPERTY(
bool watchedRouteActive READ watchedRouteActive NOTIFY navigationChanged)
684 friend class ParsedRoute;
687 PreloadRouteGroup* preload()
const {
return m_preload; };
688 PageRouter* router()
const {
return m_router; };
691 Q_EMIT routerChanged();
694 bool isCurrent()
const;
696 Q_INVOKABLE
void navigateToRoute(
QJSValue route);
698 Q_INVOKABLE
bool routeActive(
QJSValue route);
700 Q_INVOKABLE
void pushRoute(
QJSValue route);
702 Q_INVOKABLE
void popRoute();
704 Q_INVOKABLE
void bringToView(
QJSValue route);
715 Q_INVOKABLE
void pushFromHere(
QJSValue route);
726 Q_INVOKABLE
void popFromHere();
733 Q_INVOKABLE
void replaceFromHere(
QJSValue route);
734 bool watchedRouteActive();
735 void setWatchedRoute(
QJSValue route);
739 void routerChanged();
741 void isCurrentChanged();
742 void navigationChanged();
743 void watchedRouteChanged();
746 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)