Click here to Skip to main content
15,879,326 members
Articles / Desktop Programming / WPF

C.B.R.

Rate me:
Please Sign up or sign in to vote.
4.96/5 (52 votes)
22 Oct 2012GPL329 min read 123.8K   1.8K   132  
Comic and electronic publication reader with library management, extended file conversion, and devices support.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CBR.Core.Helpers;
using CBR.Core.Models;
using CBR.Core.Services;
using System.Windows.Input;
using System.Windows.Threading;
using CBR.Core.Files;
using CBR.Components;

namespace CBR.ViewModels
{
	public class BookViewModelBase : ViewModelBase
	{
		#region ----------------CONSTRUCTOR----------------

		public BookViewModelBase(Book bk)
		{
			if (bk != null)
			{
                Service = BookServiceFactory.Instance.GetService(bk);

                Data = bk;
                //BookData.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_bookData_PropertyChanged);
			}

            //register to the mediator for messages
            Mediator.Instance.RegisterHandler( ViewModelMessages.SettingsChanged, 
                (Object o) =>
                {
                    RaisePropertyChanged("MagnifierSize");
                    RaisePropertyChanged("MagnifierScale");
                } );

            //create a dispatch timer to load the image cache
            _CacheTimerClock = new DispatcherTimer();
            _CacheTimerClock.Interval = new TimeSpan(0, 0, 5);
            _CacheTimerClock.IsEnabled = true;
            _CacheTimerClock.Tick += new EventHandler(CacheTimerClockElapsed);
		}

		void _bookData_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
		{
			//RaisePropertyChanged(e.PropertyName);
		}

		#endregion

		#region -----------------PROPERTIES-----------------

        private DispatcherTimer _CacheTimerClock;

        public double MagnifierSize
        {
            get { return WorkspaceService.Instance.Settings.MagnifierSize; }
        }

        public double MagnifierScale
        {
            get { return WorkspaceService.Instance.Settings.MagnifierScaleFactor; }
        }

        new public Book Data
        {
            get { return base.Data as Book; }
            set { base.Data = value; }
        }

        private double _scale = 0.2;
        public double Scale
        {
            get { return _scale; }
            set
            {
                if (_scale != value)
                {
                    _scale = value;
                    RaisePropertyChanged("Scale");
                }
            }
        }

        public BookServiceBase Service { get; set; }

        public long CacheSize { get; set; }

        public string CacheInfo
        {
            get
            {
                return "No cache information";
            }
        }

        public string PageInfo
        {
            get
            {
                return string.Empty;
            }
        }

        private bool _isInEditMode = false;
        public bool IsInEditMode
        {
            get { return _isInEditMode; }
            set
            {
                if (_isInEditMode != value)
                {
                    _isInEditMode = value;
                    RaisePropertyChanged("IsInEditMode");
                }
            }
        }
        #endregion

        #region -----------------COMMANDS-----------------

        #region save command

        private ICommand bookSaveCommand;
        public ICommand BookSaveCommand
        {
            get
            {
                if (bookSaveCommand == null)
                    bookSaveCommand = new DelegateCommand(SaveCommandExecute, SaveCommandCanExecute);
                return bookSaveCommand;
            }
        }

        virtual public bool SaveCommandCanExecute()
        {
            return false;
        }

        virtual public void SaveCommandExecute()
        {
        }

        #endregion

        #region bookmark command

        private ICommand bookmarkCommand;
        public ICommand BookmarkCommand
        {
            get
            {
                if (bookmarkCommand == null)
                    bookmarkCommand = new DelegateCommand(BookmarkCommandExecute, BookmarkCommandCanExecute);
                return bookmarkCommand;
            }
        }

        virtual public bool BookmarkCommandCanExecute()
        {
            return false;
        }

        virtual public void BookmarkCommandExecute()
        {
        }

        #endregion

        #region goto bookmark command

        private ICommand gotoBookmarkCommand;
        public ICommand GotoBookmarkCommand
        {
            get
            {
                if (gotoBookmarkCommand == null)
                    gotoBookmarkCommand = new DelegateCommand(GotoBookmarkCommandExecute, GotoBookmarkCommandCanExecute);
                return gotoBookmarkCommand;
            }
        }

        virtual public bool GotoBookmarkCommandCanExecute()
        {
            return Service.HasMark(Data);
        }

        virtual public void GotoBookmarkCommandExecute()
        {
        }

        #endregion

        #region clear bookmark command

        private ICommand clearBookmarkCommand;
        public ICommand ClearBookmarkCommand
        {
            get
            {
                if (clearBookmarkCommand == null)
                    clearBookmarkCommand = new DelegateCommand(ClearBookmarkCommandExecute, ClearBookmarkCommandCanExecute);
                return clearBookmarkCommand;
            }
        }

        virtual public bool ClearBookmarkCommandCanExecute()
        {
            return Service.HasMark(Data);
        }

        virtual public void ClearBookmarkCommandExecute()
        {
            Service.ClearMark(Data);
        }

        #endregion

        #region fit mode command

        private ICommand fitModeCommand;
        public ICommand FitModeCommand
        {
            get
            {
                if (fitModeCommand == null)
                    fitModeCommand = new DelegateCommand<string>(FitModeCommandExecute, FitModeCommandCanExecute);
                return fitModeCommand;
            }
        }

        virtual public bool FitModeCommandCanExecute(string param)
        {
            return false;
        }

        virtual public void FitModeCommandExecute(string param)
        {
        }

        #endregion

        #region close command

        private ICommand bookCloseCommand;
        public ICommand BookCloseCommand
        {
            get
            {
                if (bookCloseCommand == null)
                    bookCloseCommand = new DelegateCommand(CloseCommandExecute, CloseCommandCanExecute);
                return bookCloseCommand;
            }
        }

        virtual public bool CloseCommandCanExecute()
        {
            return true;
        }

        virtual public void CloseCommandExecute()
        {
            if (Data != null)
                Service.UnloadBook(Data);
            Data = null;
        }

        #endregion

        #region change page command
        private ICommand bookChangePageCommand;
        public ICommand BookChangePageCommand
        {
            get
            {
                if (bookChangePageCommand == null)
                    bookChangePageCommand = new DelegateCommand<string>(GotoPage, CanGotoPage);
                return bookChangePageCommand;
            }
        }

        virtual public bool CanGotoPage(string step)
        {
            return false;
        }

        virtual public void GotoPage(string step)
        {
            return;

        }
        #endregion

        #region goto page command

        private ICommand bookGotoPageCommand;
        public ICommand BookGotoPageCommand
        {
            get
            {
                if (bookGotoPageCommand == null)
                    bookGotoPageCommand = new DelegateCommand<string>(GotoPageCommandExecute, GotoPageCommandCanExecute);
                return bookGotoPageCommand;
            }
        }

        virtual public bool GotoPageCommandCanExecute(string param)
        {
            if (Data != null)
                return Service.CanGotoPage(Data, Convert.ToInt32(param));
            else
                return false;
        }

        virtual public void GotoPageCommandExecute(string param)
        {
            if (Data != null)
                Service.GotoPage(Data, Convert.ToInt32(param));
        }

        #endregion

        #region goto page command

        private ICommand bookGotoLastPageCommand;
        public ICommand BookGotoLastPageCommand
        {
            get
            {
                if (bookGotoLastPageCommand == null)
                    bookGotoLastPageCommand = new DelegateCommand<string>(GotoLastPageCommandExecute, delegate(string param) { return true; });
                return bookGotoLastPageCommand;
            }
        }

        virtual public void GotoLastPageCommandExecute(string param)
        {
            if (Data != null)
                Service.GotoPage(Data, Data.PageCount);
        }

        #endregion

        #endregion

        #region -----------------INTERNALS-----------------

        public void CacheTimerClockElapsed(object tag, EventArgs args)
        {
            try
            {
                if (this.Data != null)
                {
                    Service.ManageCache(this.Data);
                    RaisePropertyChanged("CacheInfo");
                }
            }
            catch (Exception err)
            {
                ExceptionHelper.Manage("BookViewModelBase:CacheTimerClockElapsed", err);
            }
        }

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Architect
France France
WPF and MVVM fan, I practice C # in all its forms from the beginning of the NET Framework without mentioning C ++ / MFC and other software packages such as databases, ASP, WCF, Web & Windows services, Application, and now Core and UWP.
In my wasted hours, I am guilty of having fathered C.B.R. and its cousins C.B.R. for WinRT and UWP on the Windows store.
But apart from that, I am a great handyman ... the house, a rocket stove to heat the jacuzzi and the last one: a wood oven for pizza, bread, and everything that goes inside

https://guillaumewaser.wordpress.com/
https://fouretcompagnie.wordpress.com/

Comments and Discussions