summaryrefslogtreecommitdiffstats
path: root/Widgets/NavPage.py
diff options
context:
space:
mode:
Diffstat (limited to 'Widgets/NavPage.py')
-rw-r--r--Widgets/NavPage.py179
1 files changed, 0 insertions, 179 deletions
diff --git a/Widgets/NavPage.py b/Widgets/NavPage.py
deleted file mode 100644
index 61d63aa..0000000
--- a/Widgets/NavPage.py
+++ /dev/null
@@ -1,179 +0,0 @@
-"""
- Copyright 2023 Suchinton Chakravarty
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-"""
-
-import extras.Kuksa_Instance as kuksa_instance
-import os
-import sys
-import requests
-import folium
-from PyQt5 import uic, QtCore
-
-from PyQt5.QtCore import QUrl, QObject
-from PyQt5.QtCore import QThread, pyqtSignal, pyqtSlot
-from PyQt5.QtWebEngineWidgets import QWebEngineView
-from PyQt5.QtWidgets import QApplication, QListWidget, QLineEdit, QCompleter, QListView
-from PyQt5.QtGui import QPainterPath, QRegion, QStandardItemModel, QStandardItem
-from PyQt5.QtCore import QRectF
-from PyQt5.QtCore import QTimer
-from PyQt5.QtCore import Qt
-
-current_dir = os.path.dirname(os.path.abspath(__file__))
-
-# ========================================
-
-sys.path.append(os.path.dirname(current_dir))
-
-
-Form, Base = uic.loadUiType(os.path.join(current_dir, "../ui/Nav.ui"))
-
-# ========================================
-
-
-class Nav_Paths():
- def __init__(self):
- self.currLat = "Vehicle.CurrentLocation.Latitude"
- self.currLng = "Vehicle.CurrentLocation.Longitude"
- self.desLat = "Vehicle.Cabin.Infotainment.Navigation.DestinationSet.Latitude"
- self.desLng = "Vehicle.Cabin.Infotainment.Navigation.DestinationSet.Longitude"
-
-
-class NavWidget(Base, Form):
- suggestionsUpdated = pyqtSignal(list)
-
- def __init__(self, parent=None):
- super(self.__class__, self).__init__(parent)
- self.setupUi(self)
-
- self.From_address = self.findChild(QLineEdit, "From_address")
- self.To_address = self.findChild(QLineEdit, "To_address")
- self.map_view = self.findChild(QWebEngineView, "map_view")
-
- path = QPainterPath()
- path.addRoundedRect(QRectF(self.map_view.rect()), 10, 10)
- mask = QRegion(path.toFillPolygon().toPolygon())
- self.map_view.setMask(mask)
-
- self.searching_thread = QThread()
-
- self.suggested_addresses = QStandardItemModel()
- completer = CustomCompleter(self.suggested_addresses)
- self.From_address.setCompleter(completer)
-
- self.From_address.textChanged.connect(self.delayed_search)
- # self.To_address.textChanged.connect(lambda: self.start_search(self.To_address.text()))
-
- self.suggestionsUpdated.connect(self.update_suggestions)
-
- self.timer = QTimer()
- self.timer.setInterval(500) # Adjust delay as needed
- self.timer.setSingleShot(True)
- self.timer.timeout.connect(self.start_search)
-
- def delayed_search(self):
- self.timer.start()
-
- def start_search(self):
- query = self.From_address.text().strip()
- if query:
- self.searching_thread.run = lambda: self.search_address(query)
- self.searching_thread.start()
-
- def search_address(self, query):
- options = self.fetch_address_suggestions(query)
- self.suggestionsUpdated.emit(options)
-
- def fetch_address_suggestions(self, query):
- url = f"https://nominatim.openstreetmap.org/search?format=json&limit=5&q={requests.utils.quote(query)}"
- response = requests.get(url)
- if response.status_code == 200:
- return response.json()
- else:
- return []
-
- def show_suggestions(self, options):
- current_query = self.From_address.text().strip()
- if current_query:
- self.suggested_addresses.clear()
- for suggestion in options:
- address = suggestion.get("display_name", "")
- self.suggested_addresses.appendRow(QStandardItem(address))
-
- @pyqtSlot(list)
- def update_suggestions(self, options):
- self.show_suggestions(options)
-
- def select_suggestion(self, item):
- address = item.text()
- # self.address_input.setText(address)
- coordinates = self.show_location(address)
-
- def show_location(self, query):
- url = f"https://nominatim.openstreetmap.org/search?format=json&limit=1&q={requests.utils.quote(query)}"
- response = requests.get(url)
- if response.status_code == 200:
- data = response.json()
- if data:
- lat = data[0]["lat"]
- lon = data[0]["lon"]
- location = [float(lat), float(lon)]
-
- self.update_map(location)
- return location
-
- def update_map(self, location):
- map_html = self.create_map_html(location)
- file_path = os.path.abspath("map.html")
- with open(file_path, "w") as f:
- f.write(map_html)
- self.map_view.load(QUrl.fromLocalFile(file_path))
-
- def create_map_html(self, location):
- map = folium.Map(location=location, zoom_start=15)
- marker = folium.Marker(location=location)
- marker.add_to(map)
- return map._repr_html_()
-
-
-class CustomCompleter(QCompleter):
- def __init__(self, parent=None):
- super().__init__(parent)
- self.setPopup(QListView())
- self.popup().setStyleSheet("""
- QListView {
- background-color: #131313 ; /* black */
- color: #fff;
- border: 1px solid #4BD7D6 ; /* light blue */
- border-radius: 2px;
- padding: 10px;
- margin: 2px;
- }
- """)
-
- self.popup().setWindowFlags(Qt.Popup | Qt.FramelessWindowHint)
- self.popup().setUniformItemSizes(True)
- self.popup().setWordWrap(True)
- self.popup().setSpacing(1)
- self.popup().setFrameShape(QListView.NoFrame)
- self.popup().setFrameShadow(QListView.Plain)
- self.popup().setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
-
-
-if __name__ == '__main__':
- import sys
- app = QApplication(sys.argv)
- w = NavWidget()
- w.show()
- sys.exit(app.exec_())