}
}
+void SituareEngine::routeParsed(Route &route)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ Q_UNUSED(route);
+
+ m_ui->toggleProgressIndicator(false);
+}
+
+void SituareEngine::routeTo(const GeoCoordinate &endPointCoordinates)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ m_ui->toggleProgressIndicator(true);
+
+ if (m_gps->isRunning())
+ m_routingService->requestRoute(m_gps->lastPosition(), endPointCoordinates);
+ else
+ m_routingService->requestRoute(m_mapEngine->centerGeoCoordinate(), endPointCoordinates);
+}
+
void SituareEngine::setAutoCentering(bool enabled)
{
qDebug() << __PRETTY_FUNCTION__ << enabled;
connect(m_ui, SIGNAL(findFriend(GeoCoordinate)),
m_mapEngine, SLOT(centerToCoordinates(GeoCoordinate)));
+
// signals from routing tab
connect(m_ui,
SIGNAL(locationItemClicked(const GeoCoordinate&, const GeoCoordinate&)),
connect(m_ui, SIGNAL(draggingModeTriggered()),
this, SLOT(draggingModeTriggered()));
+
+ connect(m_ui, SIGNAL(routeTo(const GeoCoordinate&)),
+ this, SLOT(routeTo(const GeoCoordinate&)));
}
void SituareEngine::signalsFromMapEngine()
qDebug() << __PRETTY_FUNCTION__;
connect(m_routingService, SIGNAL(routeParsed(Route&)),
+ this, SLOT(routeParsed(Route&)));
+
+ connect(m_routingService, SIGNAL(routeParsed(Route&)),
m_mapEngine, SLOT(setRoute(Route&)));
}
class MapEngine;
class MCE;
class NetworkAccessManager;
+class Route;
class RoutingService;
class SituareService;
class User;
void requestAutomaticUpdateIfMoved(GeoCoordinate position);
/**
+ * @brief Route is parsed and is ready for further processing.
+ *
+ * @param route Route item containing parsed route details
+ */
+ void routeParsed(Route &route);
+
+ /**
+ * @brief Routes to geo coordinates.
+ *
+ * Uses map center coordinates as start point.
+ * @param endPointCoordinates end point geo coordinates
+ */
+ void routeTo(const GeoCoordinate &endPointCoordinates);
+
+ /**
* @brief Slot for setting auto centering state.
*
* Calls gps to send last known position
m_friendListHeaderWidget->setLayout(filterLayout);
m_friendListHeaderWidget->setAutoFillBackground(true);
+ m_routeButton = new QPushButton("Route to friend");
+
QPalette labelPalette = m_friendListHeaderWidget->palette();
labelPalette.setColor(QPalette::Background, Qt::black);
listViewLayout->setContentsMargins(PANEL_MARGIN_LEFT, 0, PANEL_MARGIN_RIGHT, 0);
listViewLayout->addWidget(m_friendListView);
+ friendListPanelLayout->addWidget(m_routeButton);
friendListPanelLayout->addWidget(m_friendListHeaderWidget);
friendListPanelLayout->addLayout(listViewLayout);
connect(m_clearFilterButton, SIGNAL(clicked()),
this, SLOT(clearFriendListFilter()));
+
+ connect(m_routeButton, SIGNAL(clicked()),
+ this, SLOT(routeToSelectedFriend()));
}
void FriendListPanel::friendImageReady(User *user)
m_friendListView->clearFilter();
}
+void FriendListPanel::routeToSelectedFriend()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ FriendListItem *item = dynamic_cast<FriendListItem *>(m_friendListView->selectedItem());
+
+ if (item)
+ emit routeToFriend(item->coordinates());
+}
+
void FriendListPanel::showFriendsInList(const QList<QString> &userIDs)
{
qDebug() << __PRETTY_FUNCTION__;
void clearFriendListFilter();
/**
+ * @brief Routes to selected friend.
+ *
+ * Emits routeToFriend if friend is selected from list.
+ */
+ void routeToSelectedFriend();
+
+ /**
* @brief Slot to show friends in list.
*
* Shows only friends that are on userIDs list.
*/
void findFriend(const GeoCoordinate &coordinates);
+ /**
+ * @brief Signal for routing to friend.
+ *
+ * @param coordinates friend's geo coordinates
+ */
+ void routeToFriend(const GeoCoordinate &coordinates);
+
/*******************************************************************************
* DATA MEMBERS
******************************************************************************/
QLabel *m_friendListLabel; ///< Friend list label
QPushButton *m_clearFilterButton; ///< Button to clear list filtering
+ QPushButton *m_routeButton; ///< Button to route to friend
FriendListView *m_friendListView; ///< Friend list view
};
qDebug() << __PRETTY_FUNCTION__;
}
-void FriendListView::listItemClicked(QListWidgetItem *item)
+void FriendListView::listItemClicked(ListItem *item)
{
qDebug() << __PRETTY_FUNCTION__;
/**
* @brief Slot for list item clicked.
*
- * @param item QListWidgetItem
+ * @param item ListItem
*/
- void listItemClicked(QListWidgetItem *item);
+ void listItemClicked(ListItem *item);
/******************************************************************************
* SIGNALS
{
qDebug() << __PRETTY_FUNCTION__;
+ setSelectionMode(QAbstractItemView::SingleSelection);
setAutoFillBackground(false);
viewport()->setAutoFillBackground(false);
return item;
}
-void ListView::listItemClicked(QListWidgetItem *item)
+void ListView::listItemClicked(ListItem *item)
{
qDebug() << __PRETTY_FUNCTION__;
- ListItem *currentItem = dynamic_cast<ListItem*>(item);
-
- if (currentItem) {
- if (m_previousItem == currentItem) {
- currentItem->toggleSelection();
+ if (m_previousItem == item) {
+ item->toggleSelection();
- } else {
- if (m_previousItem)
- m_previousItem->setSelected(false);
+ } else {
+ if (m_previousItem)
+ m_previousItem->setSelected(false);
- currentItem->setSelected(true);
- }
- m_previousItem = currentItem;
+ item->setSelected(true);
}
+ m_previousItem = item;
+}
+
+void ListView::listItemClicked(QListWidgetItem *item)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ ListItem *currentItem = dynamic_cast<ListItem*>(item);
+
+ if (currentItem)
+ listItemClicked(currentItem);
}
ListItem *ListView::listItem(const QString &itemID)
return item;
}
+ListItem *ListView::selectedItem()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ return m_previousItem;
+}
+
+void ListView::setSelectedItem(ListItem *item)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ listItemClicked(item);
+}
+
ListView::~ListView()
{
qDebug() << __PRETTY_FUNCTION__;
*/
ListItem *listItemAt(int index);
+ /**
+ * @brief Returns selected ListItem.
+ *
+ * @return ListItem if there is selected, 0 otherwise
+ */
+ ListItem *selectedItem();
+
+ /**
+ * @brief Sets selected item.
+ *
+ * @param item ListItem to select
+ */
+ void setSelectedItem(ListItem *item);
+
protected slots:
/**
* @brief Slot for list item clicked.
*
* Toggles items selection state and emits listItemClicked signal.
*/
- virtual void listItemClicked(QListWidgetItem *item);
+ virtual void listItemClicked(ListItem *item);
+
+private slots:
+ /**
+ * @brief Slot for list item clicked.
+ *
+ * Toggles items selection state and emits listItemClicked signal.
+ */
+ void listItemClicked(QListWidgetItem *item);
+
/*******************************************************************************
* DATA MEMBERS
qDebug() << __PRETTY_FUNCTION__;
}
-void LocationListView::listItemClicked(QListWidgetItem *item)
+void LocationListView::listItemClicked(ListItem *item)
{
qDebug() << __PRETTY_FUNCTION__;
/**
* @brief Slot for list item clicked.
*
- * @param item QListWidgetItem
+ * @param item ListItem
*/
- void listItemClicked(QListWidgetItem *item);
+ void listItemClicked(ListItem *item);
signals:
/**
connect(this, SIGNAL(friendImageReady(User*)),
m_friendsListPanel, SLOT(friendImageReady(User*)));
+
+ connect(m_friendsListPanel, SIGNAL(routeToFriend(const GeoCoordinate&)),
+ this, SIGNAL(routeTo(const GeoCoordinate&)));
}
void MainWindow::buildIndicatorButtonPanel()
SIGNAL(locationItemClicked(const GeoCoordinate&, const GeoCoordinate&)),
this,
SIGNAL(locationItemClicked(const GeoCoordinate&, const GeoCoordinate&)));
+
+ connect(m_routingPanel, SIGNAL(routeToLocation(const GeoCoordinate&)),
+ this, SIGNAL(routeTo(const GeoCoordinate&)));
}
void MainWindow::buildUserInfoPanel()
void reverseGeoReady(const QString &address);
/**
+ * @brief Signal for routing to geo coordinates.
+ *
+ * @param coordinates destination geo coordinates
+ */
+ void routeTo(const GeoCoordinate &coordinates);
+
+ /**
* @brief Signal to save username to settings
*
* @param username Username
QVBoxLayout *listViewLayout = new QVBoxLayout;
listViewLayout->setContentsMargins(PANEL_MARGIN_LEFT, 0, PANEL_MARGIN_RIGHT, 0);
+ m_routeButton = new QPushButton("Route to location");
+
m_locationListHeaderWidget = new QWidget();
m_locationListHeaderWidget->setLayout(headerLayout);
m_locationListHeaderWidget->setAutoFillBackground(true);
listViewLayout->addWidget(m_locationListView);
+ routingLayout->addWidget(m_routeButton);
routingLayout->addWidget(m_locationListHeaderWidget);
routingLayout->addLayout(listViewLayout);
SIGNAL(locationItemClicked(const GeoCoordinate&, const GeoCoordinate&)),
this,
SIGNAL(locationItemClicked(const GeoCoordinate&, const GeoCoordinate&)));
+
+ connect(m_routeButton, SIGNAL(clicked()),
+ this, SLOT(routeToSelectedLocation()));
}
void RoutingPanel::populateLocationListView(const QList<Location> &locations)
ListItem *item = m_locationListView->listItemAt(FIRST_LOCATION_ITEM_INDEX);
if (item)
- m_locationListView->listItemClicked(item);
+ m_locationListView->setSelectedItem(item);
}
}
+
+void RoutingPanel::routeToSelectedLocation()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ LocationListItem *item = dynamic_cast<LocationListItem *>
+ (m_locationListView->selectedItem());
+
+ if (item)
+ emit routeToLocation(item->coordinates());
+}
*/
void populateLocationListView(const QList<Location> &locations);
+ /**
+ * @brief Routes to selected location.
+ *
+ * Emits routeToLocation if location is selected from list.
+ */
+ void routeToSelectedLocation();
+
/*******************************************************************************
* SIGNALS
******************************************************************************/
*/
void locationItemClicked(const GeoCoordinate &swBound, const GeoCoordinate &neBound);
+ /**
+ * @brief Signal for routing to location.
+ *
+ * @param coordinates location's geo coordinates
+ */
+ void routeToLocation(const GeoCoordinate &coordinates);
+
/*******************************************************************************
* DATA MEMBERS
******************************************************************************/
private:
- QLabel *m_locationListLabel; ///< Location list label
- QWidget *m_locationListHeaderWidget; ///< Location list header widget
+ QLabel *m_locationListLabel; ///< Location list label
+
+ QPushButton *m_routeButton; ///< Route to location button
+
+ QWidget *m_locationListHeaderWidget; ///< Location list header widget
LocationListView *m_locationListView; ///< Location list view
};