|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Controls;
using System.Diagnostics;
using QuickZip.UserControls.Breadcrumb.View;
using System.Windows.Media;
using QuickZip.UserControls.Breadcrumb.Framework;
using System.Windows;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Threading;
using System.Windows.Input;
namespace QuickZip.UserControls.Breadcrumb.Presenter
{
public class AutoCompleteTextBoxPresenter : PresenterBase<View.AutoCompleteTextBoxView>
{
private string _selectedPath = "";
private BreadcrumbItemBase _currentPresenter = null;
internal BreadcrumbItemBase _root = null;
private string[] _suggestions = new string[] { };
private Visibility _visibility;
public Visibility Visibility { get { return _visibility; } set { _visibility = value; } }
public bool IsVisible { get { return Visibility == Visibility.Visible; } }
public BreadcrumbItemBase Root { get { return _root; } }
public string SelectedPath { get { return _selectedPath; } set { ChangeSelectedPath(value); } }
public string[] Suggestions { get { return _suggestions; } set { _suggestions = value; OnPropertyChanged("Suggestions"); } }
public AutoCompleteTextBoxPresenter(View.AutoCompleteTextBoxView view)
: base(view)
{
view.TextChanged += delegate { SelectedPath = view.Text; };
}
public void ChangeSelectedPath(string value)
{
if (value == "") return;
_selectedPath = value.EndsWith(":") ? value + "\\" : value;
OnPropertyChanged("SelectedPath");
try
{
if (IsVisible && Root != null && _selectedPath != "")
{
BreadcrumbItemBase folderPresenter = Root.LookupFolder(BreadcrumbItemBase.PathType.ptFolder,
_selectedPath.EndsWith(":\\") ? _selectedPath : Path.GetDirectoryName(_selectedPath));
if (folderPresenter != null)
{
_currentPresenter = folderPresenter;
if (_currentPresenter.SubFolders.Length == 0)
{
folderPresenter.PropertyChanged += new PropertyChangedEventHandler(folderPresenter_PropertyChanged);
folderPresenter.ScheduleLoad();
}
else loadSubFolders();
}
else Suggestions = new string[] { };
}
} catch { };
}
private void loadSubFolders()
{
if (Keyboard.FocusedElement == View)
{
if (_currentPresenter == null)
Suggestions = new string[] { };
else
{
List<string> retVal = new List<string>();
foreach (BreadcrumbItemBase subFolder in _currentPresenter.ActualSubFolders)
{
string logicalPath = Root.ConvertPath(BreadcrumbItemBase.PathType.ptDisplay, subFolder.FolderPath);
if (logicalPath.ToLower().StartsWith(_selectedPath.ToLower()))
retVal.Add(logicalPath);
}
Suggestions = retVal.ToArray();
}
View.CheckPopupIsOpen();
}
}
void folderPresenter_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SubFolders")
if (_currentPresenter != null)
_currentPresenter.PropertyChanged -= new PropertyChangedEventHandler(folderPresenter_PropertyChanged);
_dispatcher.Invoke(
new ThreadStart(delegate
{
loadSubFolders();
}));
}
}
}
|
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.