calculator/src/Calculator/Views/HistoryList.xaml.cpp

90 lines
2.9 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
// HistoryList.xaml.cpp
// Implementation of the HistoryList class
//
#include "pch.h"
#include "HistoryList.xaml.h"
#include "CalcViewModel/Common/LocalizationService.h"
using namespace CalculatorApp;
using namespace CalculatorApp::Common;
using namespace CalculatorApp::ViewModel;
using namespace Platform;
using namespace std;
using namespace Windows::ApplicationModel::Core;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::UI::ViewManagement;
namespace MUXC = Microsoft::UI::Xaml::Controls;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=390556
DEPENDENCY_PROPERTY_INITIALIZATION(HistoryList, RowHeight);
HistoryList::HistoryList()
{
InitializeComponent();
HistoryEmpty->FlowDirection = LocalizationService::GetInstance()->GetFlowDirection();
}
void HistoryList::HistoryList_Loaded(Object^ sender, RoutedEventArgs^ e)
{
// When transitioning between docked and undocked view states, the history list is
// unloaded and then loaded, so we attempt to create the titlebarhelper every time
// we are loaded, letting the util function check if we are docked or not.
m_titleBarHelper = TitleBarHelper::CreateTitleBarHelperIfNotDocked(CustomTitleBar);
}
void HistoryList::HistoryList_Unloaded(Object^ sender, RoutedEventArgs^ e)
{
m_titleBarHelper = nullptr;
}
void HistoryList::ListView_ItemClick(_In_ Object^ sender, _In_ ItemClickEventArgs^ e)
{
HistoryViewModel^ historyVM = static_cast<HistoryViewModel^>(this->DataContext);
HistoryItemViewModel^ clickedItem = safe_cast<HistoryItemViewModel^>(e->ClickedItem);
// When the user clears the history list in the overlay view and presses enter, the clickedItem is nullptr
if (clickedItem != nullptr)
{
historyVM->ShowItem(clickedItem);
}
}
void HistoryList::OnDeleteMenuItemClicked(_In_ Object^ sender, _In_ RoutedEventArgs^ e)
{
auto clickedItem = safe_cast<HistoryItemViewModel^>(safe_cast<FrameworkElement^>(sender)->DataContext);
Model->DeleteItem(clickedItem);
}
void HistoryList::OnDeleteSwipeInvoked(_In_ MUXC::SwipeItem^ sender, _In_ MUXC::SwipeItemInvokedEventArgs^ e)
{
auto swipedItem = safe_cast<HistoryItemViewModel^>(e->SwipeControl->DataContext);
Model->DeleteItem(swipedItem);
}
void HistoryList::ScrollToBottom()
{
auto historyItems = this->HistoryListView->Items;
if (historyItems->Size > 0)
{
this->HistoryListView->ScrollIntoView(historyItems->GetAt(historyItems->Size - 1));
}
}