1 #pragma once 2 #include <gtkmm.h> 3 #include <memory> 4 5 #include "item_view.h" 6 #include "search_list.h" 7 8 class KeychainView : public Gtk::HPaned { 9 public: KeychainView(const std::shared_ptr<Keychain> & _keychain)10 KeychainView(const std::shared_ptr<Keychain>& _keychain) 11 : Gtk::HPaned(), 12 keychain(_keychain), 13 placeHolderWidget("Select an item...", Gtk::ALIGN_CENTER), 14 scroller() { 15 searchList = std::unique_ptr<SearchList>(new SearchList( 16 [this](const Glib::ustring& uuid) { selectionChangedFn(uuid); }, *keychain)); 17 18 add1(*searchList); 19 add2(scroller); 20 scroller.add(placeHolderWidget); 21 22 show_all_children(); 23 } ~KeychainView()24 virtual ~KeychainView(){}; 25 26 protected: 27 std::shared_ptr<Keychain> keychain; 28 std::unique_ptr<SearchList> searchList = nullptr; selectionChangedFn(const Glib::ustring & uuid)29 void selectionChangedFn(const Glib::ustring& uuid) { 30 auto newItemIter = keychain->find(uuid); 31 // If this isn't in the keychain (weird!) return early 32 if (newItemIter == keychain->end()) 33 return; 34 35 const KeychainItem& newItem = newItemIter->second; 36 cur_view = std::unique_ptr<ItemView>(new ItemView(newItem)); 37 scroller.remove_with_viewport(); 38 scroller.add(*cur_view); 39 40 show_all_children(); 41 }; 42 43 Gtk::Label placeHolderWidget; 44 Gtk::ScrolledWindow scroller; 45 std::unique_ptr<ItemView> cur_view = nullptr; 46 }; 47