diff --git a/data/ui/main.blp b/data/ui/main.blp index bb114a2..bcc9d5e 100644 --- a/data/ui/main.blp +++ b/data/ui/main.blp @@ -1,5 +1,6 @@ using Gtk 4.0; using Adw 1; +using Shumate 1.0; Adw.ApplicationWindow mainWindow { title: "Wince"; @@ -27,6 +28,9 @@ Adw.ApplicationWindow mainWindow { Gtk.Entry locationEntry { placeholder-text: "Location"; } + Gtk.Button geolocateButton { + icon-name: "find-location"; + } Gtk.Button searchButton { icon-name: "edit-find"; } @@ -51,62 +55,72 @@ Adw.ApplicationWindow mainWindow { Gtk.ListBox searchResults {} } - Gtk.Box detailsBox { - orientation: vertical; - visible: false; - margin-start: 14; - margin-end: 14; + Adw.Clamp { + maximum-size: 450; + tightening-threshold: 400; - Gtk.Label detailsTitle { - halign: start; - styles ["title-1"] - } - - Gtk.Box { - orientation: horizontal; - spacing: 12; - - Gtk.Label detailsIsOpen { - halign: start; - } - - Gtk.Label detailsCurrentHours { - halign: start; - } - - Gtk.Label detailsPricing { - halign: start; - } - } - - Gtk.ListBox { - styles ["boxed-list"] - selection-mode: none; - margin-top: 8; + Gtk.Label seeDetailsText { hexpand: true; + label: "Select a result to see details"; + } - Gtk.ListBoxRow { - Gtk.Label detailsAddress { + Gtk.Box detailsBox { + orientation: vertical; + visible: false; + margin-start: 14; + margin-end: 14; + + Gtk.Label detailsTitle { + halign: start; + styles ["title-1"] + } + + Gtk.Box { + orientation: horizontal; + spacing: 12; + + Gtk.Label detailsIsOpen { + halign: start; + } + + Gtk.Label detailsCurrentHours { + halign: start; + } + + Gtk.Label detailsPricing { halign: start; - margin-start: 12; - margin-top: 12; - margin-bottom: 12; } } - Gtk.ListBoxRow { - Gtk.Label detailsPhone { - halign: start; - margin-start: 12; - margin-top: 12; - margin-bottom: 12; - } - } + Gtk.ListBox { + styles ["boxed-list"] + selection-mode: none; + margin-top: 8; + hexpand: true; - Gtk.ListBoxRow { - Gtk.LinkButton detailsUrl { - label: "View on yelp"; - halign: start; + Gtk.ListBoxRow { + Gtk.Label detailsAddress { + halign: start; + margin-start: 12; + margin-top: 12; + margin-bottom: 12; + } + } + + Gtk.ListBoxRow { + Gtk.Label detailsPhone { + halign: start; + margin-start: 12; + margin-top: 12; + margin-bottom: 12; + } + } + + Gtk.ListBoxRow { + Gtk.LinkButton detailsUrl { + label: "View on yelp"; + halign: start; + } } } } diff --git a/src/modules/api/location.cr b/src/modules/api/location.cr new file mode 100644 index 0000000..e5bd4d8 --- /dev/null +++ b/src/modules/api/location.cr @@ -0,0 +1,10 @@ +module Wince::Location + extend self + + client = Geoclue::Simple.new() + + def find_location() + location = client.location + [location.latitude, location.longitude] + end +end diff --git a/src/modules/views/main.cr b/src/modules/views/main.cr index 231b0f4..a3cb7c8 100644 --- a/src/modules/views/main.cr +++ b/src/modules/views/main.cr @@ -23,6 +23,10 @@ module Wince handle_search end + GEOLOCATE_BUTTON.clicked_signal.connect do + handle_geolocate + end + BUSINESS_LIST.row_selected_signal.connect do handle_business_select end @@ -30,6 +34,10 @@ module Wince window.present end + def handle_geolocate + puts "no, not yet" + end + def yelp_response_to_business_ids(response : JSON::Any) response["businesses"].as_a.map { |b| b["id"].as_s } end @@ -106,9 +114,10 @@ module Wince DETAILS_CURRENT_HOURS.text = Utils.hours_for_day(response_json["hours"], Time.local.day_of_week) DETAILS_PRICING.text = response_json["price"].as_s? || "" DETAILS_ADDRESS.markup = Utils.format_address(response_json["location"]["display_address"]) - DETAILS_PHONE.text = response_json["display_phone"].as_s? || "" + DETAILS_PHONE.text = response_json["display_phone"].as_s? || "no phone number" DETAILS_URL.uri = response_json["url"].as_s? || "" + SEE_DETAILS_TEXT.visible = false DETAILS_BOX.visible = true LEAFLET.visible_child = DETAILS_BOX end diff --git a/src/wince.cr b/src/wince.cr index aece288..8ebc579 100644 --- a/src/wince.cr +++ b/src/wince.cr @@ -8,11 +8,13 @@ module Wince SEARCH_ENTRY = Gtk::Entry.cast(B_UI["searchEntry"]) LOCATION_ENTRY = Gtk::Entry.cast(B_UI["locationEntry"]) + GEOLOCATE_BUTTON = Gtk::Button.cast(B_UI["geolocateButton"]) SEARCH_BUTTON = Gtk::Button.cast(B_UI["searchButton"]) BUSINESS_LIST = Gtk::ListBox.cast(B_UI["searchResults"]) POWERD_BY_TEXT = Gtk::Label.cast(B_UI["poweredByText"]) SCROLL_VIEW = Gtk::ScrolledWindow.cast(B_UI["scrollWindow"]) LEAFLET = Adw::Leaflet.cast(B_UI["leaflet"]) + SEE_DETAILS_TEXT = Gtk::Label.cast(B_UI["seeDetailsText"]) DETAILS_BOX = Gtk::Box.cast(B_UI["detailsBox"]) DETAILS_TITLE = Gtk::Label.cast(B_UI["detailsTitle"]) DETAILS_IS_OPEN = Gtk::Label.cast(B_UI["detailsIsOpen"])