summaryrefslogtreecommitdiff
path: root/platform/windows/mupdf_cpp/MainPage.xaml.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/windows/mupdf_cpp/MainPage.xaml.h')
-rw-r--r--platform/windows/mupdf_cpp/MainPage.xaml.h319
1 files changed, 319 insertions, 0 deletions
diff --git a/platform/windows/mupdf_cpp/MainPage.xaml.h b/platform/windows/mupdf_cpp/MainPage.xaml.h
new file mode 100644
index 00000000..1cf8dd97
--- /dev/null
+++ b/platform/windows/mupdf_cpp/MainPage.xaml.h
@@ -0,0 +1,319 @@
+//
+// MainPage.xaml.h
+// Declaration of the MainPage class.
+//
+
+#pragma once
+
+#include "MainPage.g.h"
+#include "ppl.h"
+#include "ppltasks.h"
+#include <collection.h>
+#include <algorithm>
+#include <assert.h>
+#include "DocumentPage.h"
+#include "status.h"
+#include "PrintPage.h"
+
+using namespace Platform;
+using namespace Concurrency;
+using namespace Windows::Storage;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Media::Imaging;
+using namespace Windows::Storage::Streams;
+using namespace Windows::Foundation;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Media;
+using namespace Windows::UI::Xaml::Input;
+using namespace Windows::UI::Xaml::Shapes;
+using namespace Windows::Foundation::Collections;
+using namespace Platform::Collections;
+using namespace Windows::UI::ViewManagement;
+using namespace Windows::UI::Popups;
+using namespace Windows::UI::Xaml::Navigation;
+using namespace Windows::ApplicationModel;
+using namespace Windows::UI::Core;
+using namespace mupdfwinrt;
+
+using namespace Windows::Graphics::Display;
+using namespace Windows::Graphics::Printing;
+using namespace Windows::UI;
+using namespace Windows::UI::Text;
+using namespace Windows::UI::Xaml::Documents;
+using namespace Windows::Graphics::Printing::OptionDetails;
+using namespace Windows::UI::Xaml::Printing;
+
+typedef enum
+{
+ StatusMessage,
+ ErrorMessage
+} NotifyType_t;
+
+typedef enum {
+ REN_AVAILABLE = 0,
+ REN_THUMBS,
+ REN_UPDATE_THUMB_CANVAS,
+ REN_PAGE /* Used to ignore value when source based setting */
+} RenderingStatus_t;
+
+typedef enum {
+ PRINT_INACTIVE = 0,
+ PRINT_ACTIVE,
+ PRINT_FAILED
+} PrintStatus_t;
+
+typedef struct spatial_info_s
+{
+ Point size;
+ double scale_factor;
+} spatial_info_t;
+
+namespace mupdf_cpp
+{
+ class PageRangeException
+ {
+ private:
+ std::wstring m_message;
+ public:
+ PageRangeException(std::wstring &message)
+ {
+ m_message = message;
+ }
+ ~PageRangeException()
+ {
+ }
+ std::wstring get_DisplayMessage()
+ {
+ return m_message;
+ }
+ };
+
+ public value class PrintPageDesc
+ {
+ public:
+ Size margin;
+ Size pagesize;
+ Size printpagesize;
+ Size resolution;
+
+ friend bool operator == (PrintPageDesc pp1, PrintPageDesc pp2)
+ {
+ bool equal = (std::abs(pp1.pagesize.Width - pp2.pagesize.Width) < FLT_EPSILON) &&
+ (std::abs(pp1.pagesize.Height - pp2.pagesize.Height) < FLT_EPSILON);
+ if (equal)
+ {
+ equal = (std::abs(pp1.printpagesize.Width - pp2.printpagesize.Width) < FLT_EPSILON) &&
+ (std::abs(pp1.printpagesize.Height - pp2.printpagesize.Height) < FLT_EPSILON);
+ }
+ if (equal)
+ {
+ equal = (std::abs(pp1.resolution.Width - pp2.resolution.Width) < FLT_EPSILON) &&
+ (std::abs(pp1.resolution.Height - pp2.resolution.Height) < FLT_EPSILON);
+ }
+ return equal;
+ }
+ friend bool operator != (PrintPageDesc pp1, PrintPageDesc pp2)
+ {
+ return !(pp1 == pp2);
+ }
+ };
+
+ public ref class MainPage sealed
+ {
+
+ inline void ThrowIfFailed(HRESULT hr)
+ {
+ if (FAILED(hr))
+ {
+ /* We are in a different thread in this case. */
+ this->Dispatcher->RunAsync(CoreDispatcherPriority::Low,
+ ref new DispatchedHandler([this]()
+ {
+ this->m_print_active = PRINT_FAILED;
+ xaml_PrintStack->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+ this->NotifyUser("Print Failed", ErrorMessage);
+ }));
+ throw Platform::Exception::CreateException(hr, "Print Failed");
+ }
+ }
+
+ public:
+ MainPage();
+
+ property Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ ProtocolEvent
+ {
+ Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ get() { return _protocolEventArgs; }
+ void set(Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ value) { _protocolEventArgs = value; }
+ }
+
+ property Windows::ApplicationModel::Activation::FileActivatedEventArgs^ FileEvent
+ {
+ Windows::ApplicationModel::Activation::FileActivatedEventArgs^ get() { return _fileEventArgs; }
+ void set(Windows::ApplicationModel::Activation::FileActivatedEventArgs^ value) { _fileEventArgs = value; }
+ }
+ void NotifyUser(String^ strMessage, int type);
+ void FromFile(); /* For association cases when we are already running */
+
+ protected:
+ virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
+ virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) override;
+ property Windows::Graphics::Printing::IPrintDocumentSource^ PrintDocumentSource
+ {
+ Windows::Graphics::Printing::IPrintDocumentSource^ get()
+ {
+ return m_printdoc_source;
+ }
+ }
+
+ private:
+ Windows::Foundation::EventRegistrationToken _pageLoadedHandlerToken;
+ Vector<DocumentPage^>^ m_docPages;
+ Vector<DocumentPage^>^ m_thumbnails;
+ Vector<IVector<RectList^>^>^ m_page_link_list;
+ Vector<int>^ m_linkset;
+ Vector<RectList^>^ m_text_list;
+ mudocument^ mu_doc;
+ int m_rectlist_page;
+ bool m_file_open;
+ int m_currpage;
+ int m_searchpage;
+ int m_num_pages;
+ int m_slider_min;
+ int m_slider_max;
+ bool m_init_done;
+ bool m_flip_from_searchlink;
+ bool m_links_on;
+ int m_search_rect_count;
+ cancellation_token_source m_searchcts;
+ bool m_page_update;
+ long long m_memory_use;
+ WriteableBitmap ^m_BlankBmp;
+ String^ m_textcolor;
+ String^ m_linkcolor;
+ FlipView^ m_curr_flipView;
+ RenderingStatus_t m_ren_status;
+ cancellation_token_source m_ThumbCancel;
+ bool m_insearch; /* Used for UI display */
+ bool m_search_active; /* Used to avoid multiple UI clicks */
+ bool m_sliderchange;
+ double m_Progress;
+ double m_doczoom;
+
+ /* Print related */
+ PrintDocument^ m_printdoc;
+ IPrintDocumentSource^ m_printdoc_source;
+ PrintPageDesc m_printpagedesc;
+ int m_printresolution;
+ bool m_centerprint;
+ bool m_pageRangeEditVisible;
+ std::vector<int> m_ppage_num_list;
+ int m_curr_print_count;
+ PrintStatus_t m_print_active;
+
+ /* DirectX Print Control */
+ PrintManager ^m_print_manager;
+ Microsoft::WRL::ComPtr<ID3D11Device> m_d3d_device;
+ Microsoft::WRL::ComPtr<ID3D11DeviceContext> m_d3d_context;
+ Microsoft::WRL::ComPtr<ID2D1PrintControl> m_d2d_printcontrol;
+ Microsoft::WRL::ComPtr<ID2D1Device> m_d2d_device;
+ Microsoft::WRL::ComPtr<IWICImagingFactory2> m_wic_factory;
+ Microsoft::WRL::ComPtr<ID2D1Factory1> m_d2d_factory;
+ D3D_FEATURE_LEVEL m_featureLevel;
+ void *m_print_struct;
+
+ void ReplaceImage(int page_num, InMemoryRandomAccessStream^ ras, Point ras_size, double zoom);
+ void Picker(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void Searcher(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void OpenDocumentPrep(StorageFile^ file);
+ void OpenDocument(StorageFile^ file);
+ void InitialRender();
+ void RenderRange(int curr_page);
+ void CleanUp();
+ void UpdatePage(int page_num, InMemoryRandomAccessStream^ ras, Point ras_size, Page_Content_t content_type, double zoom);
+ void CreateBlank(int width, int height);
+ void HandleFileNotFoundException(Platform::COMException^ e);
+ void NotifyUserFileNotExist();
+ void SetFlipView();
+ void FlipView_SelectionChanged(Object^ sender, SelectionChangedEventArgs^ e);
+ void SearchNext(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void SearchPrev(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void CancelSearch(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void SearchInDirection(int dir, String^ textToFind);
+ void ShowSearchResults(int page_num, unsigned int box_count);
+ void ClearTextSearch();
+ void AddTextCanvas();
+ void GridSizeChanged();
+ void UpdateThumbSizes();
+ void UpdatePreRenderedPageSizes();
+ void ShowThumbnail();
+ void Canvas_ManipulationCompleted(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationCompletedRoutedEventArgs^ e);
+ void AddThumbNail(int page_num, FlipView^ flip_view);
+ spatial_info_t InitSpatial(double scale);
+ void RenderThumbs();
+ void SetThumb(unsigned int page_num);
+ void ReleasePages(int old_page, int new_page);
+ void Linker(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void AddLinkCanvas();
+ void ClearLinks();
+ void InvalidateLinks();
+ void ContentDisplay(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void ListView_Single_Tap(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
+ void ContentSelected(Platform::Object^ sender, Windows::UI::Xaml::Controls::ItemClickEventArgs^ e);
+ void ContentChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e);
+ void Reflower(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void topAppBar_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void UpdateAppBarButtonViewState();
+ void ExitInvokedHandler(Windows::UI::Popups::IUICommand^ command);
+ void OKInvokedHandler(Windows::UI::Popups::IUICommand^ command);
+ int ComputePageSize(spatial_info_t spatial_info, int page_num, Point *ren_size, float *scale_factor);
+ void ScrollChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::ScrollViewerViewChangedEventArgs^ e);
+ void LinkTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
+ void SearchProgress(IAsyncOperationWithProgress<int, double>^ operation, double status);
+ void PasswordOK(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void App_Suspending(Object^ sender, SuspendingEventArgs^ e);
+ void ExceptionHandler(Object^ sender, UnhandledExceptionEventArgs^ e);
+ void ZoomInPress(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void ZoomOutPress(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+ void NonTouchZoom(int zoom);
+ void ShowSearchBox();
+ bool IsNotStandardView();
+ void Page_Loaded(Object^ sender, RoutedEventArgs^ e);
+ Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ _protocolEventArgs;
+ Windows::ApplicationModel::Activation::FileActivatedEventArgs^ _fileEventArgs;
+ void Slider_ValueChanged(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+ void Slider_Key(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
+ void Slider_Common();
+ void FlipView_Started(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationStartedRoutedEventArgs^ e);
+ void UpdateZoom();
+ String^ GetVisualState();
+ void SetThumbInit(unsigned int page_num);
+
+ /* Print Related */
+ void RegisterForPrinting();
+ void PrintOptionsChanged(PrintTaskOptionDetails^ sender, PrintTaskOptionChangedEventArgs^ args);
+ void RefreshPreview();
+ void RemovePageRangeEdit(PrintTaskOptionDetails^ printTaskOptionDetails);
+ void SplitString(String^ string, wchar_t delimiter, std::vector<std::wstring>& words);
+ void GetPagesInRange(String^ pageRange);
+ void SetPrintTask( PrintManager^, PrintTaskRequestedEventArgs^ args);
+ void SetUpDirectX();
+
+ internal:
+ void CreatePrintControl(IPrintDocumentPackageTarget* docPackageTarget,
+ D2D1_PRINT_CONTROL_PROPERTIES* printControlProperties);
+ void PrintPage(uint32 page_num, D2D1_RECT_F image_area, D2D1_SIZE_F page_area,
+ float device_dpi, IStream* print_ticket);
+ HRESULT ClosePrintControl();
+ void DrawPreviewSurface(float width, float height, float scale,
+ D2D1_RECT_F contentBox, uint32 desiredJobPage,
+ IPrintPreviewDxgiPackageTarget* previewTarget);
+ int GetPrintPageCount();
+ void SetPrintTarget(void *print_struct);
+ void PrintProgress(PrintTask^ sender, PrintTaskProgressingEventArgs^ args);
+ void PrintProgressTile(int total_tiles);
+ void PrintCompleted(PrintTask^ sender, PrintTaskCompletedEventArgs^ args);
+private:
+ void Testing(Platform::Object^ sender, Windows::UI::Xaml::Input::ManipulationCompletedRoutedEventArgs^ e);
+ void HideProgress(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+};
+}