예제 #1
0
 private void OpenFile(string filename)
 {
     if (filename == CurrentPath || string.IsNullOrEmpty(filename))
     {
         return;
     }
     try
     {
         if (File.Exists(filename))
         {
             VFS.FullPath = new string[] { filename, "" }
         }
         ;
         else
         {
             VFS.FullPath = new string[] { filename }
         };
         var vm = new DirectoryViewModel(VFS.FullPath, VFS.GetFiles(), VFS.IsVirtual);
         PushViewModel(vm);
         if (null != VFS.CurrentArchive)
         {
             SetStatusText(VFS.CurrentArchive.Description);
         }
         lv_SelectItem(0);
     }
     catch (OperationCanceledException X)
     {
         SetStatusText(X.Message);
     }
     catch (Exception X)
     {
         PopupError(string.Format("{0}:\n{1}", filename, X.Message), guiStrings.MsgErrorOpening);
     }
 }
예제 #2
0
        private void OpenDirectoryEntry(DirectoryViewModel vm, EntryViewModel entry)
        {
            string old_dir = null == vm ? "" : vm.Path.Last();
            string new_dir = entry.Source.Name;

            if (".." == new_dir)
            {
                if (null != vm && !vm.IsArchive)
                {
                    new_dir = Path.Combine(old_dir, entry.Name);
                }
                if (vm.Path.Count > 1 && string.IsNullOrEmpty(old_dir))
                {
                    old_dir = vm.Path[vm.Path.Count - 2];
                }
            }
            Trace.WriteLine(new_dir, "OpenDirectoryEntry");
            int old_fs_count = VFS.Count;

            vm = TryCreateViewModel(new_dir);
            if (null == vm)
            {
                if (VFS.Count == old_fs_count)
                {
                    return;
                }
                vm = new DirectoryViewModel(VFS.FullPath, new Entry[0], VFS.IsVirtual);
                PushViewModel(vm);
            }
            else
            {
                PushViewModel(vm);
                if (VFS.Count > old_fs_count && null != VFS.CurrentArchive)
                {
                    SetStatusText(string.Format("{0}: {1}", VFS.CurrentArchive.Description,
                                                Localization.Format("MsgFiles", VFS.CurrentArchive.Dir.Count())));
                }
                else
                {
                    SetStatusText("");
                }
            }
            if (".." == entry.Name)
            {
                lv_SelectItem(Path.GetFileName(old_dir));
            }
            else
            {
                lv_SelectItem(0);
            }
        }
예제 #3
0
        void WindowRendered()
        {
            DirectoryViewModel vm = null;

            try
            {
                vm = GetNewViewModel(m_app.InitPath);
            }
            catch (Exception X)
            {
                PopupError(X.Message, guiStrings.MsgErrorOpening);
            }
            if (null == vm)
            {
                vm = CreateViewModel(Directory.GetCurrentDirectory(), true);
            }
            ViewModel = vm;
            lv_SelectItem(0);
            if (!vm.IsArchive)
            {
                SetStatusText(guiStrings.MsgReady);
            }
        }
예제 #4
0
파일: ViewModel.cs 프로젝트: zxc120/GARbro
 public DirectoryPosition(DirectoryViewModel vm, EntryViewModel item)
 {
     Path = vm.Path;
     Item = null != item ? item.Name : null;
 }
예제 #5
0
 /// <summary>
 /// Save current position and update view model.
 /// </summary>
 void PushViewModel(DirectoryViewModel vm)
 {
     SaveCurrentPosition();
     ViewModel = vm;
 }