From 7afefc8342853df50dc1e1a192415cd1164a7382 Mon Sep 17 00:00:00 2001 From: Michael Vrhel Date: Fri, 10 May 2013 15:20:08 -0700 Subject: Implemented zooming and fixed and simplified the binding of several objects to the UI XAML --- winrt/mupdf_cpp/DocumentPage.h | 57 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'winrt/mupdf_cpp/DocumentPage.h') diff --git a/winrt/mupdf_cpp/DocumentPage.h b/winrt/mupdf_cpp/DocumentPage.h index dc006e65..a7585410 100644 --- a/winrt/mupdf_cpp/DocumentPage.h +++ b/winrt/mupdf_cpp/DocumentPage.h @@ -8,6 +8,7 @@ using namespace Windows::UI::Xaml::Media::Imaging; using namespace Windows::UI::Xaml::Controls; using namespace Windows::Foundation::Collections; +using namespace Windows::UI::Xaml::Data; typedef enum { FULL_RESOLUTION = 0, @@ -21,8 +22,7 @@ namespace mupdf_cpp { // enables data binding with this class [Windows::UI::Xaml::Data::Bindable] - - public ref class DocumentPage sealed + public ref class DocumentPage sealed : Windows::UI::Xaml::Data::INotifyPropertyChanged { private: int height; @@ -42,6 +42,7 @@ namespace mupdf_cpp void set(IVector^ value) { textbox = value; + DocumentPage::OnPropertyChanged("TextBox"); } } @@ -51,6 +52,7 @@ namespace mupdf_cpp void set(IVector^ value) { linkbox = value; + DocumentPage::OnPropertyChanged("LinkBox"); } } @@ -112,7 +114,58 @@ namespace mupdf_cpp void set(WriteableBitmap^ value) { image = value; + DocumentPage::OnPropertyChanged("Image"); } } + + private: + bool _isPropertyChangedObserved; + event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ _privatePropertyChanged; + + + protected: + /// + /// Notifies listeners that a property value has changed. + /// + /// Name of the property used to notify listeners. + void OnPropertyChanged(String^ propertyName) + { + if (_isPropertyChangedObserved) + { + PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName)); + } + } + + public: + + // in c++, it is not neccessary to include definitions of add, remove, and raise. + // these definitions have been made explicitly here so that we can check if the + // event has listeners before firing the event + virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged + { + virtual Windows::Foundation::EventRegistrationToken add(Windows::UI::Xaml::Data::PropertyChangedEventHandler^ e) + { + _isPropertyChangedObserved = true; + return _privatePropertyChanged += e; + } + virtual void remove(Windows::Foundation::EventRegistrationToken t) + { + _privatePropertyChanged -= t; + } + + protected: + virtual void raise(Object^ sender, Windows::UI::Xaml::Data::PropertyChangedEventArgs^ e) + { + if (_isPropertyChangedObserved) + { + _privatePropertyChanged(sender, e); + } + } + } +#pragma endregion + + + + }; } -- cgit v1.2.3