public void StartPresentation(Presentation presentation)
		{
			switch(presentation.Type)
			{
			case Presentation.Typ.GoogleIO2012Slides:
				new GoogleIO2012Helper(activityEdit).StartPresentation(activityEdit.FragEditDetail, presentation);
				break;
				
			default:
				throw new NotImplementedException();
			}
		}
        public bool Insert(Presentation presentation)
        {
            bool ret = false;

            if (presentation == null || presentation.PresentationUID == Guid.Empty || String.IsNullOrEmpty(presentation.Name))
                return false;

            using (SqliteConnection conn = GetConnection())
            {
                using (SqliteCommand sqlCmd = new SqliteCommand(@"
                    BEGIN; " +
                    "INSERT INTO presentations " +
                    "(PresentationUID, Name, DateCreate, Type) " +
                    "VALUES " +
                    "(@PresentationUID, @Name, @DateCreate, @Type); " +
                    "COMMIT;", conn))
                {
                    sqlCmd.Parameters.AddWithValue("@PresentationUID", presentation.PresentationUID.ToString());
                    sqlCmd.Parameters.AddWithValue("@Name", presentation.Name);
                    sqlCmd.Parameters.AddWithValue("@DateCreate", DateTime.Now);
                    sqlCmd.Parameters.AddWithValue("@Type", presentation.Type);

                    conn.Open();

                    try
                    {
                        sqlCmd.ExecuteNonQuery();
                        ret = true;
                    }
                    catch (SqliteException ex)
                    {
                        Logging.Log(this, Logging.LoggingTypeError, "SQL cmd: " + sqlCmd, ex);
                    }

                    conn.Close();
                }
            }

            return ret;
        }
        public List<Presentation> Select(string name = null)
        {
            List<Presentation> ret = new List<Presentation>();

            string sSqlCmd = "SELECT PresentationUID, Name, DateCreate, Type FROM presentations ";

            if (!String.IsNullOrEmpty(name))
                sSqlCmd += "WHERE Name=@name ";

            sSqlCmd += "ORDER BY Name;";

            using (SqliteConnection conn = GetConnection())
            {
                using (SqliteCommand sqlCmd = new SqliteCommand(sSqlCmd, conn))
                {
                    if (!String.IsNullOrEmpty(name))
                        sqlCmd.Parameters.AddWithValue("@name", name);

                    conn.Open();

                    try
                    {
                        using (DbDataReader reader = sqlCmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (reader.HasRows)
                                {
                                    if (reader.HasRows)
                                    {
                                        Presentation presentation = new Presentation();
                                        presentation.PresentationUID = new Guid(reader.GetString(0));
                                        presentation.Name = reader.GetString(1);
                                        presentation.DateCreate = reader.GetDateTime(2);
                                        presentation.Type = (Presentation.Typ)reader.GetInt32(3);

                                        ret.Add(presentation);
                                    }
                                }
                            }
                        }
                    }
                    catch (SqliteException ex)
                    {
                        Logging.Log(this, Logging.LoggingTypeError, "SQL cmd: " + sqlCmd, ex);
                    }

                    conn.Close();
                }
            }

            return ret;
        }
        public void StartPresentation(EditDetailFragment fragment, Presentation presentation)
        {
            Intent intent = new Intent(fragment.Activity, typeof(BrowserActivity));
            string pFolder = Path.Combine(presentationsHelper.PresentationsFolder, presentation.PresentationUID.ToString());
            string demo = pFolder + "/template.html";

            intent.PutExtra("url", "file://" + demo);

            fragment.StartActivity(intent);
        }
 public void ShowPresentationsFolder(Presentation presentation)
 {
     string folder = Path.Combine(presentationsHelper.PresentationsFolder, presentation.PresentationUID.ToString());
     (this.context as BaseActivity).ShowErrorMsg(folder, (this.context as Activity).GetText(Resource.String.DlgTitleShowPresentationsFolder));
 }
        public bool SavePresentation(EditDetailFragment fragment, View viewEditDetail, Presentation presentation)
        {
            if (presentation == null || viewEditDetail == null)
            {
                // TODO Fehlermeldung
                return false;
            }

            // View für die entsprechenden Typen laden
            switch(presentation.Type)
            {
            case Presentation.Typ.GoogleIO2012Slides:
                GoogleIO2012Helper helper = new GoogleIO2012Helper(context);

                EditText etContent = (EditText)viewEditDetail.FindViewById(Resource.Id.etContent);
                if (!helper.SaveContent(presentation.PresentationUID, etContent.Text.Trim()))
                {
                    // ToDo Fehlermeldung
                }

                // Die vorhande Konfiguration laden um nur geänderte Stellen zu überschreiben
                GoogleIO2012Config cfg = helper.LoadConfig(presentation.PresentationUID);

                if (cfg.settings != null)
                {
                    GoogleIO2012ConfigSettings settings = cfg.settings;

                    settings.title = ((EditText)viewEditDetail.FindViewById(Resource.Id.etTitle)).Text;

                    string title2 = ((EditText)viewEditDetail.FindViewById(Resource.Id.etTitle2)).Text;

                    if (!String.IsNullOrEmpty(title2))
                        settings.title += "<br />" + title2;

                    settings.subtitle = ((EditText)viewEditDetail.FindViewById(Resource.Id.etSubTitle)).Text;
                    settings.useBuilds = ((ToggleButton)viewEditDetail.FindViewById(Resource.Id.tbtnAnimation)).Checked;
                    settings.enableSlideAreas = ((ToggleButton)viewEditDetail.FindViewById(Resource.Id.tbtnAreas)).Checked;
                    settings.enableTouch = ((ToggleButton)viewEditDetail.FindViewById(Resource.Id.tbtnTouch)).Checked;
                }

                if (cfg.presenters != null && cfg.presenters.Count > 0)
                {
                    GoogleIO2012ConfigPresenters pres = cfg.presenters.FirstOrDefault();

                    pres.name = ((EditText)viewEditDetail.FindViewById(Resource.Id.etName)).Text;
                    pres.company = ((EditText)viewEditDetail.FindViewById(Resource.Id.etCompany)).Text;
                    pres.gplus = ((EditText)viewEditDetail.FindViewById(Resource.Id.etGooglePlus)).Text;
                    pres.twitter = ((EditText)viewEditDetail.FindViewById(Resource.Id.etTwitter)).Text;
                    pres.www = ((EditText)viewEditDetail.FindViewById(Resource.Id.etWebsite)).Text;
                    pres.github = ((EditText)viewEditDetail.FindViewById(Resource.Id.etGithub)).Text;
                }

                helper.SaveConfig(presentation.PresentationUID, cfg);

                break;
            }

            return false;
        }
        public void RenamePresentation(Presentation presentation)
        {
            Activity activity = this.context as Activity;

            // Per Dialog den Namen der neuen Presentation abfragen
            AlertDialog.Builder dialog = new AlertDialog.Builder(activity);
            dialog.SetTitle(activity.GetText(Resource.String.DlgRenamePresentationTitle));
            dialog.SetMessage(activity.GetText(Resource.String.DlgRenamePresentationText));
            dialog.SetCancelable(true);

            EditText etName = new EditText(activity);
            etName.SetSingleLine(true);

            dialog.SetView(etName);
            dialog.SetPositiveButton(activity.GetText(Resource.String.DlgRenamePresentationErstellen), delegate {
                string name = etName.Text.Trim();

                if (String.IsNullOrEmpty(name))
                {
                    // Fehlermeldung anzeigen
                    ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.DlgPresentationErrorNoName));
                }

                try
                {
                    presentationsHelper = new PresentationsHelper(this.context);
                }
                catch (Exception)
                {
                    ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.ErrorNoExternalStorage));
                }

                presentationsHelper.Rename(presentation.PresentationUID, name);
                ListView lvSlides = activity.FindViewById<ListView>(Resource.Id.lvSlides);

                foreach (Presentation p in (((SlidesAdapter)lvSlides.Adapter).GetData))
                {
                    if (p.PresentationUID == presentation.PresentationUID)
                    {
                        p.Name = name;
                        break;
                    }
                }

                // Liste aktualisieren
                if (this.context.GetType() == typeof(EditActivity))
                {
                    EditActivity editActivity = this.context as EditActivity;
                    editActivity.LoadSlidesList();
                }
            });

            dialog.SetNegativeButton(activity.GetText(Resource.String.Cancel), delegate { });
            dialog.Show();
        }
        public IMenuItem OnOptionsItemSelected(IMenuItem item, EditDetailFragment fragment, View viewEditDetail, Presentation presentation)
        {
            Logging.Log (this, Logging.LoggingTypeDebug, "OnOptionsItemSelected()");

            switch((ActionBarButtons)item.ItemId)
            {
            case ActionBarButtons.SelectPresentation:
                fragment.Activity.RunOnUiThread(() => {
                    EditActivity editActivity = context as EditActivity;

                    if (editActivity != null)
                        editActivity.ShowPresentationSelection();

                    fragment.SetHasOptionsMenu(false);
                });
                break;

            case ActionBarButtons.Save:
                if (presentation != null)
                {
                    SavePresentation(fragment, viewEditDetail, presentation);
                    Toast.MakeText(fragment.Activity, Resource.String.ToastPresentationSaved, ToastLength.Long).Show();
                }
                break;

            case ActionBarButtons.Render:
                // Async Daten Asyncron rendern lassen
                ProgressDialog pdlg = new ProgressDialog(fragment.Activity);
                pdlg.SetCancelable(false);
                pdlg.SetTitle(fragment.GetText(Resource.String.ProgressRenderPresentation));
                pdlg.SetMessage(fragment.GetText(Resource.String.PleaseWait));
                pdlg.Show();

                Task.Factory.StartNew(() => {
                    return new WSRenderGoogleIO2012(this.context).RenderPresentation(presentation.PresentationUID);
                }).ContinueWith(t => {
                    pdlg.Cancel();

                    if (t.Exception == null && t.Result)
                        Toast.MakeText(fragment.Activity, Resource.String.ToastPresentationRendered, ToastLength.Long).Show();
                    else
                    {
                        fragment.Activity.RunOnUiThread(delegate() {
                            ((BaseActivity)fragment.Activity).ShowErrorMsg(fragment.GetText(Resource.String.ToastErrorRenderPresentation));
                        });
                    }
                }, TaskScheduler.FromCurrentSynchronizationContext());
                break;

            case ActionBarButtons.Present:
                StartPresentation(fragment, presentation);
                break;
            }

            return item;
        }
        public void LoadGoogleIO2012Presentation(View viewEditDetail, Presentation presentation)
        {
            // Präsentations Content laden und anzeigen
            etContent = (EditText)viewEditDetail.FindViewById(Resource.Id.etContent);
            etContent.SetSingleLine(false);

            etTitle = (EditText)viewEditDetail.FindViewById(Resource.Id.etTitle);
            etTitle2 = (EditText)viewEditDetail.FindViewById(Resource.Id.etTitle2);
            etSubTitle = (EditText)viewEditDetail.FindViewById(Resource.Id.etSubTitle);
            tbtnAnimation = (ToggleButton)viewEditDetail.FindViewById(Resource.Id.tbtnAnimation);
            tbtnAreas = (ToggleButton)viewEditDetail.FindViewById(Resource.Id.tbtnAreas);
            tbtnTouch = (ToggleButton)viewEditDetail.FindViewById(Resource.Id.tbtnTouch);
            etName = (EditText)viewEditDetail.FindViewById(Resource.Id.etName);
            etCompany = (EditText)viewEditDetail.FindViewById(Resource.Id.etCompany);
            etGooglePlus = (EditText)viewEditDetail.FindViewById(Resource.Id.etGooglePlus);
            etTwitter = (EditText)viewEditDetail.FindViewById(Resource.Id.etTwitter);
            etWebsite = (EditText)viewEditDetail.FindViewById(Resource.Id.etWebsite);
            etGithub = (EditText)viewEditDetail.FindViewById(Resource.Id.etGithub);

            etContent.Text = LoadContent(presentation.PresentationUID);

            // Die Anzeige zurücksetzen
            etTitle.Text = String.Empty;
            etTitle2.Text = String.Empty;
            etSubTitle.Text = String.Empty;
            tbtnAnimation.Checked = false;
            tbtnAreas.Checked = false;
            tbtnTouch.Checked = false;
            etName.Text = String.Empty;
            etCompany.Text = String.Empty;
            etGooglePlus.Text = String.Empty;
            etTwitter.Text = String.Empty;
            etWebsite.Text = String.Empty;
            etGithub.Text = String.Empty;

            // Konfiguration laden und anzeigen
            GoogleIO2012Config config = LoadConfig(presentation.PresentationUID);

            if (config != null)
            {
                if (config.settings != null)
                {
                    GoogleIO2012ConfigSettings settings = config.settings;

                    etTitle.Text = settings.title;

                    if (settings.title.Contains("<br />"))
                    {
                        int nIndex = settings.title.IndexOf("<br />", StringComparison.InvariantCulture);
                        etTitle.Text = settings.title.Substring(0, nIndex).Trim();
                        etTitle2.Text = settings.title.Substring(nIndex+6, settings.title.Length-nIndex-6).Trim();
                    }

                    etSubTitle.Text = settings.subtitle;
                    tbtnAnimation.Checked = settings.useBuilds;
                    tbtnAreas.Checked = settings.enableSlideAreas;
                    tbtnTouch.Checked = settings.enableTouch;
                }

                if (config.presenters != null && config.presenters.Count > 0)
                {
                    // Das UI unterstützt derzeit nur einen Presenter
                    GoogleIO2012ConfigPresenters presenter = config.presenters.FirstOrDefault();

                    if (presenter != null)
                    {
                        etName.Text = presenter.name;
                        etCompany.Text = presenter.company;
                        etGooglePlus.Text = presenter.gplus;
                        etTwitter.Text = presenter.twitter;
                        etWebsite.Text = presenter.www;
                        etGithub.Text = presenter.github;
                    }
                }
            }
        }
 public void DeletePresentation(Presentation presentation)
 {
     if (presentationsHelper.Delete(presentation.PresentationUID) == PresentationsHelper.ErrorCode.MINIMALPRESENTATIONS)
     {
         Activity activity = this.context as Activity;
         ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.ErrorMinimalPresentationCount));
     }
     else
     {
         // Liste aktualisieren
         if (this.context.GetType() == typeof(EditActivity))
         {
             EditActivity editActivity = this.context as EditActivity;
             editActivity.LoadSlidesList();
         }
     }
 }
        public void CreatePresentation(Presentation presentation)
        {
            Activity activity = this.context as Activity;

            // Per Dialog den Namen der neuen Presentation abfragen
            AlertDialog.Builder dialog = new AlertDialog.Builder(activity);
            dialog.SetTitle(activity.GetText(Resource.String.DlgNewPresentationTitle));
            dialog.SetMessage(activity.GetText(Resource.String.DlgNewPresentationText));
            dialog.SetCancelable(true);

            EditText etName = new EditText(activity);
            etName.SetSingleLine(true);

            dialog.SetView(etName);
            dialog.SetPositiveButton(activity.GetText(Resource.String.DlgNewPresentationErstellen), delegate {
                string name = etName.Text.Trim();
                Guid newPresentationUID;

                if (String.IsNullOrEmpty(name))
                {
                    // Fehlermeldung anzeigen
                    ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.DlgPresentationErrorNoName));
                }

                // Gibt es die Präsentation schon?
                if (!presentationsHelper.Exists(name))
                {
                    // Präsentation erstellen
                    if (presentationsHelper.CreateNew(presentation.PresentationUID, out newPresentationUID, name) != PresentationsHelper.ErrorCode.OK)
                    {
                        // Fehlermeldung anzeigen
                        ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.DlgNewPresentationError));
                    }
                }
                else
                {
                    // Fehlermeldung anzeigen
                    ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.DlgPresentationErrorPraesExists));
                }

                // Präsentation laden
                if (this.context.GetType() == typeof(EditActivity))
                {
                    EditActivity editActivity = this.context as EditActivity;
                    presentation.PresentationUID = newPresentationUID;
                    editActivity.FragEditDetail.LoadPresentation(presentation);
                    editActivity.HidePresentationSelection();
                }
            });

            dialog.SetNegativeButton(activity.GetText(Resource.String.Cancel), delegate { });
            dialog.Show();
        }
		public ErrorCode CreateNew(Guid presentationUID, string name, Presentation.Typ typ)
		{
			if (presentationUID == Guid.Empty || String.IsNullOrEmpty(name))
				return ErrorCode.ERROR;

			DBPresentation dbPresentation = new DBPresentation();

			if (dbPresentation.Insert(new Presentation {
				PresentationUID = presentationUID,
				Name = name,
				Type = typ
			}))
				return ErrorCode.OK;

			return ErrorCode.ERROR;
		}
		public void ShowPresentationsFolder(Presentation presentation)
		{
			switch(presentation.Type)
			{
			case Presentation.Typ.GoogleIO2012Slides:
				new GoogleIO2012Helper(activityEdit).ShowPresentationsFolder(presentation);
				break;
				
			default:
				throw new NotImplementedException();
			}
		}