View Issue Details

IDProjectCategoryView StatusLast Update
0000714PluginsTemporary panelpublic2017-11-11 15:43
Reportersamlyukov Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status feedbackResolutionno change required 
Summary0000714: немного разных фич
Descriptionсинхронизировал изменения 2-х летней давности:
1. + опция: Отображать папки на панели.
2. + плагин можно использовать в режиме Branch (работает из меню плагинов).
3. - по Enter на <..> не попадали в стартовую папку.
4. + при изменении режима просмотра будем его запоминать (кроме запуска из комстроки с +/-full).
5. + пару строк оптимизации
TagsNo tags attached.

Activities

2009-01-24 17:09

 

!work.diff (24,222 bytes)   
Index: TmpPanel.rc
===================================================================
--- TmpPanel.rc	(revision 2517)
+++ TmpPanel.rc	(working copy)
@@ -1,6 +1,6 @@
 #include "farversion.hpp"
 
-#define PLUGIN_BUILD 45
+#define PLUGIN_BUILD 46
 #define PLUGIN_DESC "Temp Panel for FAR Manager"
 #define PLUGIN_NAME "TmpPanel"
 #define PLUGIN_FILENAME "TmpPanel.dll"
Index: TmpLng.hpp
===================================================================
--- TmpLng.hpp	(revision 2517)
+++ TmpLng.hpp	(working copy)
@@ -12,6 +12,7 @@
   MTempPanelTitleNum,
 
   MDiskMenuString,
+  MPluginMenuStringBranch,
 
   MF7,
   MAltShiftF12,
@@ -28,6 +29,7 @@
   MConfigAddToDisksMenu,
   MConfigDisksMenuDigit,
   MConfigAddToPluginsMenu,
+  MConfigPluginsMenuBranch,
 
   MConfigCommonPanel,
   MSafeModePanel,
@@ -36,6 +38,7 @@
   MReplaceInFilelist,
   MMenuForFilelist,
   MCopyContens,
+  MShowDir,
 
   MFullScreenPanel,
 
@@ -51,7 +54,8 @@
   MNewPanelForSearchResults,
   MListFilePath,
 
-  MCopyContensMsg
+  MCopyContensMsg,
+  MShowDirMsg
 };
 
 #endif /* __TMPLNG_HPP__ */
Index: TmpPanel.cpp
===================================================================
--- TmpPanel.cpp	(revision 2517)
+++ TmpPanel.cpp	(working copy)
@@ -13,7 +13,7 @@
 struct PluginStartupInfo Info;
 struct FarStandardFunctions FSF;
 BOOL IsOldFAR;
-
+TCHAR StartupCurDir[MAX_PATH];
 PluginPanels CommonPanels[COMMONPANELSNUMBER];
 
 #if defined(__GNUC__)
@@ -46,12 +46,15 @@
 #endif
 
 #ifndef UNICODE
+#define FreePanelInfo(i)
 #define WITH_ANSI_ARG     ,ANSI
 #define WITH_ANSI_PARAM   ,int ANSI
 #else
+#define FreePanelInfo(i) Info.Control(PANEL_ACTIVE,FCTL_FREEPANELINFO,&i)
 #define WITH_ANSI_ARG
 #define WITH_ANSI_PARAM
 #endif
+
 static void ProcessList(HANDLE hPlugin, TCHAR *Name, int Mode WITH_ANSI_PARAM);
 static void ShowMenuFromList(TCHAR *Name);
 static HANDLE OpenPanelFromOutput (TCHAR *argv WITH_ANSI_PARAM);
@@ -85,6 +88,8 @@
   HANDLE hPlugin=INVALID_HANDLE_VALUE;
 
   GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
 
   StartupOpenFrom=OpenFrom;
   if(OpenFrom==OPEN_COMMANDLINE)
@@ -166,6 +171,38 @@
   {
     hPlugin=new TmpPanel();
     if(hPlugin==NULL) return(INVALID_HANDLE_VALUE);
+
+    // ������� [x] in mode Branch
+    if (Opt.AddToPluginsMenu && Opt.Branch && OpenFrom==OPEN_PLUGINSMENU)
+    {
+      PanelInfo PInfo;
+      if (!Info.Control(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, &PInfo))
+        return(INVALID_HANDLE_VALUE);
+      ((TmpPanel *)hPlugin)->FindSearchResultsPanel();
+      if (Opt.Mode)
+      {
+        FreePanelItems(CommonPanels[CurrentCommonPanel].Items,
+                       CommonPanels[CurrentCommonPanel].ItemsNumber);
+        CommonPanels[CurrentCommonPanel].Items=(PluginPanelItem*)malloc(sizeof(PluginPanelItem));
+        CommonPanels[CurrentCommonPanel].ItemsNumber=0;
+      }
+      HANDLE hScreen = ((TmpPanel *)hPlugin)->BeginPutFiles();
+      for (int i=0; i<PInfo.SelectedItemsNumber; i++)
+        if (!((TmpPanel *)hPlugin)->
+#ifndef UNICODE
+            PutOneFile(PInfo.SelectedItems[i])
+#else
+            PutOneFile(*(PInfo.SelectedItems[i]))
+#endif
+           )
+        {
+          ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, false);
+           FreePanelInfo(PInfo);
+           return(INVALID_HANDLE_VALUE);
+        }
+      ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, true);
+      FreePanelInfo(PInfo);
+    }
   }
   return(hPlugin);
 }
@@ -401,6 +438,7 @@
   ReadFileList (Name, &argc, &argv WITH_ANSI_ARG);
 
   FarMenuItem *fmi=(FarMenuItem*)malloc(argc*sizeof(FarMenuItem));
+  memset(fmi,0,argc*sizeof(FarMenuItem));
   if(fmi)
   {
     TCHAR TMP[MAX_PATH];
@@ -490,6 +528,9 @@
     return(INVALID_HANDLE_VALUE);
 #undef PNAME_ARG
 
+  //save PanelMode
+  GetOptions();
+
   if(!Opt.MenuForFilelist)
   {
     HANDLE hPlugin=new TmpPanel();
@@ -540,7 +581,7 @@
   Info->DiskMenuNumbers=DiskMenuNumbers;
   Info->DiskMenuStringsNumber=Opt.AddToDisksMenu?ArraySize(DiskMenuStrings):0;
   static const TCHAR *PluginMenuStrings[1];
-  PluginMenuStrings[0]=GetMsg(MTempPanel);
+  PluginMenuStrings[0]=Opt.Branch?GetMsg(MPluginMenuStringBranch):GetMsg(MTempPanel);
   Info->PluginMenuStrings=Opt.AddToPluginsMenu?PluginMenuStrings:NULL;
   Info->PluginMenuStringsNumber=Opt.AddToPluginsMenu?ArraySize(PluginMenuStrings):0;
   static const TCHAR *PluginCfgStrings[1];
@@ -602,8 +643,8 @@
 int WINAPI EXP_NAME(GetMinFarVersion)(void)
 {
 #ifndef UNICODE
-  return(MAKEFARVERSION(1,70,1024));
+  return(MAKEFARVERSION(1,70,2087));
 #else
-  return(MAKEFARVERSION(1,80,557));
+  return(MAKEFARVERSION(2,0,684));
 #endif
 }
Index: TmpCfg.cpp
===================================================================
--- TmpCfg.cpp	(revision 2517)
+++ TmpCfg.cpp	(working copy)
@@ -19,6 +19,7 @@
 {
   AddToDisksMenu,
   AddToPluginsMenu,
+  Branch,
   CommonPanel,
   SafeModePanel,
   AnyInPanel,
@@ -26,6 +27,7 @@
   Mode,
   MenuForFilelist,
   NewPanelForSearchResults,
+  ShowDir,
   FullScreenPanel,
   ColumnTypes,
   ColumnWidths,
@@ -38,11 +40,11 @@
 
 options_t Opt;
 
-static const TCHAR REGStr[17][8]=
+static const TCHAR REGStr[19][8]=
 {
- _T("InDisks"), _T("InPlug"),
+ _T("InDisks"), _T("InPlug"), _T("Branch"),
  _T("Common"),  _T("Safe"),   _T("Any"),    _T("Contens"),
- _T("Mode"),    _T("Menu"),   _T("NewP"),
+ _T("Mode"),    _T("Menu"),   _T("NewP"),   _T("Dir"),
  _T("Full"),
  _T("ColT"),    _T("ColW"),   _T("StatT"),  _T("StatW"),
  _T("DigitV"),  _T("Mask"),   _T("Prefix")
@@ -58,37 +60,40 @@
 static const struct COptionsList OptionsList[]={
   {&Opt.AddToDisksMenu    , _T("")          ,  1},
   {&Opt.AddToPluginsMenu  , _T("")          ,  4},
+  {&Opt.Branch            , _T("")          ,  5},
 
-  {&Opt.CommonPanel       , _T("")          ,  6},
-  {&Opt.SafeModePanel     , NULL            ,  7},
-  {&Opt.AnyInPanel        , NULL            ,  8},
-  {&Opt.CopyContents      , NULL            ,  9},
-  {&Opt.Mode              , _T("")          , 10},
-  {&Opt.MenuForFilelist   , NULL            , 11},
-  {&Opt.NewPanelForSearchResults, NULL      , 12},
+  {&Opt.CommonPanel       , _T("")          ,  7},
+  {&Opt.SafeModePanel     , NULL            ,  8},
+  {&Opt.AnyInPanel        , NULL            ,  9},
+  {&Opt.CopyContents      , NULL            , 10},
+  {&Opt.Mode              , _T("")          , 11},
+  {&Opt.MenuForFilelist   , NULL            , 12},
+  {&Opt.NewPanelForSearchResults, NULL      , 13},
+  {&Opt.ShowDir           , _T("")          , 14},
 
-  {&Opt.FullScreenPanel   , NULL            , 22},
+  {&Opt.FullScreenPanel   , NULL            , 24},
 
-  {Opt.ColumnTypes        , _T("N,S")       , 15},
-  {Opt.ColumnWidths       , _T("0,8")       , 17},
-  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 19},
-  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 21},
+  {Opt.ColumnTypes        , _T("N,S")       , 17},
+  {Opt.ColumnWidths       , _T("0,8")       , 19},
+  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 21},
+  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 23},
 
   {Opt.DisksMenuDigit     , _T("1")         ,  2},
-  {Opt.Mask               , _T("*.temp")    , 25},
-  {Opt.Prefix             , _T("tmp")       , 27},
+  {Opt.Mask               , _T("*.temp")    , 27},
+  {Opt.Prefix             , _T("tmp")       , 29},
 };
 
 int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 
 void GetOptions(void)
 {
+  DWORD Type,Size,IntValueData;
+  TCHAR StrValueData[256];
+  HKEY hKey;
+  RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
+
   for(int i=AddToDisksMenu;i<=Prefix;i++)
   {
-    DWORD Type,Size,IntValueData;
-    TCHAR StrValueData[256];
-    HKEY hKey;
-    RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
     if (i<ColumnTypes)
     {
       Size=sizeof(IntValueData);
@@ -105,8 +110,14 @@
         RegQueryValueEx(hKey,REGStr[i],0,&Type,(BYTE*)StrValueData,&Size)==ERROR_SUCCESS?
         (TCHAR*)StrValueData:OptionsList[i].pStr);
     }
-    RegCloseKey(hKey);
   }
+  //save PanelMode
+  Size=sizeof(IntValueData); Type=REG_DWORD;
+  Opt.PanelMode=0x34;
+  if (RegQueryValueEx(hKey, _T("PanelMode"),0,&Type,(BYTE *)&IntValueData,&Size)==ERROR_SUCCESS)
+    Opt.PanelMode=(IntValueData>=0x30 && IntValueData<=0x39?IntValueData:0x34);
+
+  RegCloseKey(hKey);
 }
 
 const int DIALOG_WIDTH = 78;
@@ -122,46 +133,48 @@
   /* 2*/ {DI_FIXEDIT,   7, 3,  7, 3, 0, -1},
   /* 3*/ {DI_TEXT,      9, 3,  0, 0, 0, MConfigDisksMenuDigit},
   /* 4*/ {DI_CHECKBOX, DC, 2,  0, 0, 0, MConfigAddToPluginsMenu},
-  /* 5*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /* 5*/ {DI_CHECKBOX,DC+3,3,  0, 0, 0, MConfigPluginsMenuBranch},
+  /* 6*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /* 6*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
-  /* 7*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
-  /* 8*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
-  /* 9*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
-  /*10*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
-  /*11*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
-  /*12*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /* 7*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
+  /* 8*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
+  /* 9*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
+  /*10*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
+  /*11*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
+  /*12*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
+  /*13*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /*14*/ {DI_CHECKBOX, DC, 8,  0, 0, DIF_3STATE, MShowDir},
 
-  /*13*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*15*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*14*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
-  /*15*/ {DI_EDIT,      5,11, 36,11, 0, -1},
-  /*16*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
-  /*17*/ {DI_EDIT,      5,13, 36,13, 0, -1},
-  /*18*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
-  /*19*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
-  /*20*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
-  /*21*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
-  /*22*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
+  /*16*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
+  /*17*/ {DI_EDIT,      5,11, 36,11, 0, -1},
+  /*18*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
+  /*19*/ {DI_EDIT,      5,13, 36,13, 0, -1},
+  /*20*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
+  /*21*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
+  /*22*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
+  /*23*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
+  /*24*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
 
-  /*23*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*25*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*24*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
-  /*25*/ {DI_EDIT,      5,17, 36,17, 0, -1},
-  /*26*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
-  /*27*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
+  /*26*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
+  /*27*/ {DI_EDIT,      5,17, 36,17, 0, -1},
+  /*28*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
+  /*29*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
 
-  /*28*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*30*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*29*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
-  /*30*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
+  /*31*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
+  /*32*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
   };
 
   int i;
   struct FarDialogItem DialogItems[ArraySize(InitItems)];
 
   InitDialogItems(InitItems,DialogItems,ArraySize(InitItems));
-  DialogItems[29].DefaultButton=1;
+  DialogItems[31].DefaultButton=1;
   DialogItems[2].Focus=1;
 
   GetOptions();
Index: TmpRus.hlf
===================================================================
--- TmpRus.hlf	(revision 2517)
+++ TmpRus.hlf	(working copy)
@@ -72,6 +72,10 @@
  #�������� � ���� ��������#
    ����蠥� ���������� � ���� ���譨� ���㫥� �㭪� "�६����� ������".
 
+ #� ०��� "���� ��⠫���"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #�ᯮ�짮���� ����� ������#
    �� ���� ࠧ�蠥� �ᯮ�짮����� ��饩 �६����� ������,
 ᮤ�ন��� ���ன ��࠭���� �� �� �����⨨.
@@ -114,6 +118,9 @@
    �� ����⨨ #Enter# �� ����� ������, �� ��饬�� ॠ���
 ������ 䠩��, ��� ����� �㤥� ᪮��஢�� � ��������� ��ப� FAR.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #����஢��� ᮤ�ন��� �����# :
    �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
 ������ �� ����� � ��⠫����� ����஢����� ᮤ�ঠ騥�� � ��� 䠩��.
@@ -160,6 +167,12 @@
 �६����� ������. ����� ��ࠧ��, ����� ��࠭��� १����� ��᪮�쪨�
 ����権 ���᪠ � ࠡ���� � ���� �����६����.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #���� �������#    #���� ������� ��ப� �����#,
  #��ਭ� �������#  #��ਭ� ������� ��ப� �����#
  #[ ] ������࠭�� ०��# : ~+full~@CMD@
Index: TmpEng.hlf
===================================================================
--- TmpEng.hlf	(revision 2517)
+++ TmpEng.hlf	(working copy)
@@ -72,6 +72,10 @@
  #Add to plugins menu#
    Enables adding the "Temporary" item to the plugins menu.
 
+ #In mode "Branch"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #Use common panel#
    When enabled, a common temporary panel is created and its contents is
 stored even after closing the panel. When this option is not enabled,
@@ -112,6 +116,9 @@
    When #Enter# is pressed on an element that is not a real file name,
 its text will be copied to the FAR command line.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #Copy folders contents#
    When copying folders to the temporary panel, controls whether
 files are also copied to the panel. If set to the undefined state
@@ -156,6 +163,12 @@
 This allows to save the results of multiple search operations and work
 with them at the same time.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #Column types#    #Status line column types#
  #Column widths#   #Status line column widths#
  #[ ] Full screen mode# : ~+full~@CMD@
Index: TmpPanel.hpp
===================================================================
--- TmpPanel.hpp	(revision 2517)
+++ TmpPanel.hpp	(working copy)
@@ -42,7 +42,7 @@
 
 extern int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 extern TCHAR PluginRootKey[80];
-
+extern TCHAR StartupCurDir[MAX_PATH];
 const TCHAR *GetMsg(int MsgId);
 void InitDialogItems(const MyInitDialogItem *Init,struct FarDialogItem *Item,int ItemsNumber);
 
Index: TmpCfg.hpp
===================================================================
--- TmpCfg.hpp	(revision 2517)
+++ TmpCfg.hpp	(working copy)
@@ -5,6 +5,7 @@
 {
   int AddToDisksMenu;
   int AddToPluginsMenu;
+  int Branch;
   int CommonPanel;
   int SafeModePanel;
   int AnyInPanel;
@@ -12,7 +13,10 @@
   int Mode;
   int MenuForFilelist;
   int NewPanelForSearchResults;
+  int ShowDir;
+  int SelectedShowDir;
   int FullScreenPanel;
+  int PanelMode;
   int LastSearchResultsPanel;
   int SelectedCopyContents;
   TCHAR ColumnTypes[64];
Index: TmpClass.cpp
===================================================================
--- TmpClass.cpp	(revision 2517)
+++ TmpClass.cpp	(working copy)
@@ -38,7 +38,13 @@
 {
   IfOptCommonPanel();
   struct PanelInfo PInfo;
+#ifndef UNICODE
+  //������� �������, �.�. ��� ��� �� ���� ���� �������
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
+#else
+  // �� ��2, � ��������, ��� �� �������
   Info.Control(this,FCTL_GETPANELINFO,&PInfo);
+#endif
   UpdateItems(IsOwnersDisplayed (PInfo),IsLinksDisplayed (PInfo));
   *pPanelItem=TmpPanelItem;
   *pItemsNumber=TmpItemsNumber;
@@ -81,7 +87,8 @@
 
   Info->PanelModesArray=PanelModesArray;
   Info->PanelModesNumber=ArraySize(PanelModesArray);
-  Info->StartPanelMode=_T('4');
+  // save PanelMode
+  Info->StartPanelMode=(Opt.FullScreenPanel!=StartupOptFullScreenPanel?_T('4'):Opt.PanelMode);
   static struct KeyBarTitles KeyBar;
   memset(&KeyBar,0,sizeof(KeyBar));
   KeyBar.Titles[7-1]=(TCHAR*)GetMsg(MF7);
@@ -95,7 +102,7 @@
 
 int TmpPanel::SetDirectory(const TCHAR *Dir,int OpMode)
 {
-  if((OpMode & OPM_FIND)/* || lstrcmp(Dir,_T("\\"))==0*/)
+  if(OpMode & OPM_FIND)
     return(FALSE);
   if(lstrcmp(Dir,_T("\\"))==0)
     Info.Control(this,FCTL_CLOSEPLUGIN,(void*)NULL);
@@ -126,6 +133,7 @@
 {
   IfOptCommonPanel();
   Opt.SelectedCopyContents = Opt.CopyContents;
+  Opt.SelectedShowDir=Opt.ShowDir;
 
   HANDLE hScreen=Info.SaveScreen(0,0,-1,-1);
   const TCHAR *MsgItems[]={GetMsg(MTempPanel),GetMsg(MTempSendFiles)};
@@ -179,6 +187,14 @@
     lstrcat(wp, PanelItem.FindData.lpwszFileName);
     CurPanelItem->FindData.lpwszFileName = wp;
 #endif
+     // add [ ] ShowDir
+    if (Opt.SelectedShowDir==2 && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+    {
+      const TCHAR *MsgItems[]={GetMsg(MWarning),GetMsg(MShowDirMsg)};
+      Opt.SelectedShowDir=!Info.Message(Info.ModuleNumber,FMSG_MB_YESNO,_T("Config"),MsgItems,
+          sizeof(MsgItems)/sizeof(MsgItems[0]),0);
+    }
+
     if(Opt.SelectedCopyContents && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
     {
       if (Opt.SelectedCopyContents==2)
@@ -331,9 +347,17 @@
 {
   struct PluginPanelItem *CurItem=TmpPanelItem;
   for(int i=0;i<TmpItemsNumber-1;i++,CurItem++)
-    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0)
+  {
+    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0
+       // add [ ] ShowDir
+       || ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            && lstrcmp(CurItem->FindData.cFileName, _T("..")) )  )
       CurItem->Flags|=REMOVE_FLAG;
-    RemoveEmptyItems();
+  }
+  if ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+        && lstrcmp(CurItem->FindData.cFileName, _T("..")) )
+    CurItem->Flags|=REMOVE_FLAG;
+  RemoveEmptyItems();
 }
 
 
@@ -479,11 +503,16 @@
 
 int TmpPanel::ProcessEvent(int Event,void *)
 {
+  struct PanelInfo PInfo;
+#ifndef UNICODE
+  //������� �������, �.�. ��� ��� �� ���� ���� �������
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
+#else
+  // �� ��2, � ��������, ��� �� �������
+  Info.Control(this,FCTL_GETPANELINFO,&PInfo);
+#endif
   if(Event==FE_CHANGEVIEWMODE)
   {
-    IfOptCommonPanel();
-    struct PanelInfo PInfo;
-    Info.Control(this,FCTL_GETPANELINFO,&PInfo);
     int UpdateOwners=IsOwnersDisplayed (PInfo) && !LastOwnersRead;
     int UpdateLinks=IsLinksDisplayed (PInfo) && !LastLinksRead;
     if(UpdateOwners || UpdateLinks)
@@ -492,8 +521,20 @@
       Info.Control(this,FCTL_UPDATEPANEL,(void *)TRUE);
       Info.Control(this,FCTL_REDRAWPANEL,NULL);
     }
-    FreePanelInfo(PInfo);
   }
+  // save PanelMode
+  else if (Event==FE_CLOSE)
+  {
+    PInfo.ViewMode += 0x30;
+    HKEY hKey; DWORD Disposition;
+    if (Opt.FullScreenPanel==StartupOptFullScreenPanel && RegCreateKeyEx(HKEY_CURRENT_USER,
+          PluginRootKey,0,NULL,0,KEY_WRITE,NULL, &hKey,&Disposition)==ERROR_SUCCESS)
+    {
+      RegSetValueEx(hKey,_T("PanelMode"),0,REG_DWORD,(LPBYTE)&PInfo.ViewMode,sizeof(int));
+      RegCloseKey(hKey);
+    }
+  }
+  FreePanelInfo(PInfo);
   return(FALSE);
 }
 
@@ -572,14 +613,21 @@
       return(TRUE);
   }
 
-  if(ControlState==0 && Key==VK_RETURN && Opt.AnyInPanel)
+  if(ControlState==0 && Key==VK_RETURN)
   {
     TCHAR CurFileName [NM];
-    if (!IsCurrentFileCorrect (CurFileName))
+    BOOL Ret;
+    if (!(Ret=IsCurrentFileCorrect(CurFileName)) && Opt.AnyInPanel)
     {
       Info.Control(this,FCTL_SETCMDLINE,&CurFileName);
       return(TRUE);
     }
+    // �� ���� � ������ �� <..> ������� ������ �����
+    if (Ret && !lstrcmp(CurFileName,_T("..")))
+    {
+      SetDirectory(StartupCurDir,0);
+      return(TRUE);
+    }
   }
 
   if (Opt.SafeModePanel && ControlState == PKF_CONTROL && Key == VK_PRIOR)
Index: TmpEng.lng
===================================================================
--- TmpEng.lng	(revision 2517)
+++ TmpEng.lng	(working copy)
@@ -9,6 +9,7 @@
 " %sTemporary panel [%d] "
 
 "temporary"
+"Temporary panel - branch"
 
 "Remove"
 "Switch"
@@ -23,8 +24,9 @@
 
 "Temporary panel"
 "Add to &Disks menu"
-"Disks menu &hotkey ('1'-'9'). Leave empty to autoassign"
+"Disks menu &hotkey ('1'-'9')"
 "Add to &Plugins menu"
+"In mode "&Branch""
 
 "Use &common panel"
 "&Safe panel mode"
@@ -33,6 +35,7 @@
 "&Replace files with file list"
 "&Menu from file list"
 "Copy folder c&ontents"
+"Show fold&ers in panel"
 
 "F&ull screen mode"
 
@@ -49,3 +52,4 @@
 "Save file list as"
 
 "Copy folder contents?"
+"Show folders in panel?"
\ No newline at end of file
Index: TmpRus.lng
===================================================================
--- TmpRus.lng	(revision 2517)
+++ TmpRus.lng	(working copy)
@@ -9,6 +9,7 @@
 " %s�६����� ������ [%d] "
 
 "�६�����"
+"�६����� ������ - ���� ��⠫���"
 
 "�����"
 "�롮�"
@@ -23,8 +24,9 @@
 
 "�६����� ������"
 "�������� � ���� &��᪮�"
-"&������ ����㯠 ('1'-'9'). �᫨ �� �������, �����砥��� ᠬ�"
+"&������ ����㯠 ('1'-'9')"
 "�������� � ���� &��������"
+"� ०��� "&���� ��⠫���""
 
 "�ᯮ�짮���� &����� ������"
 "&�������� ०�� ������"
@@ -33,6 +35,7 @@
 ""&������" ��� 䠩��-ᯨ᪠"
 "&���� �� 䠩��-ᯨ᪠"
 "����஢��� �&���ন��� �����"
+"�⮡�&���� ����� �� ������"
 
 "�����&�࠭�� ०��"
 
@@ -49,3 +52,4 @@
 "���࠭��� ᯨ᮪ ���"
 
 "����஢��� ᮤ�ন��� �����?"
+"�⮡ࠦ��� ����� �� ������?"
Index: TmpClass.hpp
===================================================================
--- TmpClass.hpp	(revision 2517)
+++ TmpClass.hpp	(working copy)
@@ -23,7 +23,6 @@
     void ProcessSaveListKey();
     void ProcessPanelSwitchMenu();
     void SwitchToPanel (int NewPanelIndex);
-    void FindSearchResultsPanel();
     void SaveListFile (const TCHAR *Path);
     int IsCurrentFileCorrect (TCHAR *pCurFileName);
 
@@ -45,7 +44,7 @@
     HANDLE BeginPutFiles();
     void CommitPutFiles (HANDLE hRestoreScreen, int Success);
     int PutOneFile (PluginPanelItem &PanelItem);
-
+    void FindSearchResultsPanel();
     int SetFindList(const struct PluginPanelItem *PanelItem,int ItemsNumber);
     int ProcessEvent(int Event,void *Param);
     int ProcessKey(int Key,unsigned int ControlState);
!work.diff (24,222 bytes)   

samlyukov

2009-02-01 09:11

reporter   bugnote:0002374

адаптация к последнему АПИ2

2009-02-01 09:11

 

!work2.diff (25,763 bytes)   
Index: TmpPanel.rc
===================================================================
--- TmpPanel.rc	(revision 2545)
+++ TmpPanel.rc	(working copy)
@@ -1,6 +1,6 @@
 #include "farversion.hpp"
 
-#define PLUGIN_BUILD 46
+#define PLUGIN_BUILD 47
 #define PLUGIN_DESC "Temp Panel for FAR Manager"
 #define PLUGIN_NAME "TmpPanel"
 #define PLUGIN_FILENAME "TmpPanel.dll"
Index: TmpLng.hpp
===================================================================
--- TmpLng.hpp	(revision 2545)
+++ TmpLng.hpp	(working copy)
@@ -12,6 +12,7 @@
   MTempPanelTitleNum,
 
   MDiskMenuString,
+  MPluginMenuStringBranch,
 
   MF7,
   MAltShiftF12,
@@ -28,6 +29,7 @@
   MConfigAddToDisksMenu,
   MConfigDisksMenuDigit,
   MConfigAddToPluginsMenu,
+  MConfigPluginsMenuBranch,
 
   MConfigCommonPanel,
   MSafeModePanel,
@@ -36,6 +38,7 @@
   MReplaceInFilelist,
   MMenuForFilelist,
   MCopyContens,
+  MShowDir,
 
   MFullScreenPanel,
 
@@ -51,7 +54,8 @@
   MNewPanelForSearchResults,
   MListFilePath,
 
-  MCopyContensMsg
+  MCopyContensMsg,
+  MShowDirMsg
 };
 
 #endif /* __TMPLNG_HPP__ */
Index: TmpCfg.cpp
===================================================================
--- TmpCfg.cpp	(revision 2545)
+++ TmpCfg.cpp	(working copy)
@@ -19,6 +19,7 @@
 {
   AddToDisksMenu,
   AddToPluginsMenu,
+  Branch,
   CommonPanel,
   SafeModePanel,
   AnyInPanel,
@@ -26,6 +27,7 @@
   Mode,
   MenuForFilelist,
   NewPanelForSearchResults,
+  ShowDir,
   FullScreenPanel,
   ColumnTypes,
   ColumnWidths,
@@ -38,11 +40,11 @@
 
 options_t Opt;
 
-static const TCHAR REGStr[17][8]=
+static const TCHAR REGStr[19][8]=
 {
- _T("InDisks"), _T("InPlug"),
+ _T("InDisks"), _T("InPlug"), _T("Branch"),
  _T("Common"),  _T("Safe"),   _T("Any"),    _T("Contens"),
- _T("Mode"),    _T("Menu"),   _T("NewP"),
+ _T("Mode"),    _T("Menu"),   _T("NewP"),   _T("Dir"),
  _T("Full"),
  _T("ColT"),    _T("ColW"),   _T("StatT"),  _T("StatW"),
  _T("DigitV"),  _T("Mask"),   _T("Prefix")
@@ -58,37 +60,40 @@
 static const struct COptionsList OptionsList[]={
   {&Opt.AddToDisksMenu    , _T("")          ,  1},
   {&Opt.AddToPluginsMenu  , _T("")          ,  4},
+  {&Opt.Branch            , _T("")          ,  5},
 
-  {&Opt.CommonPanel       , _T("")          ,  6},
-  {&Opt.SafeModePanel     , NULL            ,  7},
-  {&Opt.AnyInPanel        , NULL            ,  8},
-  {&Opt.CopyContents      , NULL            ,  9},
-  {&Opt.Mode              , _T("")          , 10},
-  {&Opt.MenuForFilelist   , NULL            , 11},
-  {&Opt.NewPanelForSearchResults, NULL      , 12},
+  {&Opt.CommonPanel       , _T("")          ,  7},
+  {&Opt.SafeModePanel     , NULL            ,  8},
+  {&Opt.AnyInPanel        , NULL            ,  9},
+  {&Opt.CopyContents      , NULL            , 10},
+  {&Opt.Mode              , _T("")          , 11},
+  {&Opt.MenuForFilelist   , NULL            , 12},
+  {&Opt.NewPanelForSearchResults, NULL      , 13},
+  {&Opt.ShowDir           , _T("")          , 14},
 
-  {&Opt.FullScreenPanel   , NULL            , 22},
+  {&Opt.FullScreenPanel   , NULL            , 24},
 
-  {Opt.ColumnTypes        , _T("N,S")       , 15},
-  {Opt.ColumnWidths       , _T("0,8")       , 17},
-  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 19},
-  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 21},
+  {Opt.ColumnTypes        , _T("N,S")       , 17},
+  {Opt.ColumnWidths       , _T("0,8")       , 19},
+  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 21},
+  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 23},
 
   {Opt.DisksMenuDigit     , _T("1")         ,  2},
-  {Opt.Mask               , _T("*.temp")    , 25},
-  {Opt.Prefix             , _T("tmp")       , 27},
+  {Opt.Mask               , _T("*.temp")    , 27},
+  {Opt.Prefix             , _T("tmp")       , 29},
 };
 
 int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 
 void GetOptions(void)
 {
+  DWORD Type,Size,IntValueData;
+  TCHAR StrValueData[256];
+  HKEY hKey;
+  RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
+
   for(int i=AddToDisksMenu;i<=Prefix;i++)
   {
-    DWORD Type,Size,IntValueData;
-    TCHAR StrValueData[256];
-    HKEY hKey;
-    RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
     if (i<ColumnTypes)
     {
       Size=sizeof(IntValueData);
@@ -105,8 +110,14 @@
         RegQueryValueEx(hKey,REGStr[i],0,&Type,(BYTE*)StrValueData,&Size)==ERROR_SUCCESS?
         (TCHAR*)StrValueData:OptionsList[i].pStr);
     }
-    RegCloseKey(hKey);
   }
+  //save PanelMode
+  Size=sizeof(IntValueData); Type=REG_DWORD;
+  Opt.PanelMode=0x34;
+  if (RegQueryValueEx(hKey, _T("PanelMode"),0,&Type,(BYTE *)&IntValueData,&Size)==ERROR_SUCCESS)
+    Opt.PanelMode=(IntValueData>=0x30 && IntValueData<=0x39?IntValueData:0x34);
+
+  RegCloseKey(hKey);
 }
 
 const int DIALOG_WIDTH = 78;
@@ -122,46 +133,48 @@
   /* 2*/ {DI_FIXEDIT,   7, 3,  7, 3, 0, -1},
   /* 3*/ {DI_TEXT,      9, 3,  0, 0, 0, MConfigDisksMenuDigit},
   /* 4*/ {DI_CHECKBOX, DC, 2,  0, 0, 0, MConfigAddToPluginsMenu},
-  /* 5*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /* 5*/ {DI_CHECKBOX,DC+3,3,  0, 0, 0, MConfigPluginsMenuBranch},
+  /* 6*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /* 6*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
-  /* 7*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
-  /* 8*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
-  /* 9*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
-  /*10*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
-  /*11*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
-  /*12*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /* 7*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
+  /* 8*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
+  /* 9*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
+  /*10*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
+  /*11*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
+  /*12*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
+  /*13*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /*14*/ {DI_CHECKBOX, DC, 8,  0, 0, DIF_3STATE, MShowDir},
 
-  /*13*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*15*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*14*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
-  /*15*/ {DI_EDIT,      5,11, 36,11, 0, -1},
-  /*16*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
-  /*17*/ {DI_EDIT,      5,13, 36,13, 0, -1},
-  /*18*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
-  /*19*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
-  /*20*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
-  /*21*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
-  /*22*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
+  /*16*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
+  /*17*/ {DI_EDIT,      5,11, 36,11, 0, -1},
+  /*18*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
+  /*19*/ {DI_EDIT,      5,13, 36,13, 0, -1},
+  /*20*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
+  /*21*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
+  /*22*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
+  /*23*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
+  /*24*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
 
-  /*23*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*25*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*24*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
-  /*25*/ {DI_EDIT,      5,17, 36,17, 0, -1},
-  /*26*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
-  /*27*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
+  /*26*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
+  /*27*/ {DI_EDIT,      5,17, 36,17, 0, -1},
+  /*28*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
+  /*29*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
 
-  /*28*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*30*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*29*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
-  /*30*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
+  /*31*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
+  /*32*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
   };
 
   int i;
   struct FarDialogItem DialogItems[ArraySize(InitItems)];
 
   InitDialogItems(InitItems,DialogItems,ArraySize(InitItems));
-  DialogItems[29].DefaultButton=1;
+  DialogItems[31].DefaultButton=1;
   DialogItems[2].Focus=1;
 
   GetOptions();
Index: TmpPanel.cpp
===================================================================
--- TmpPanel.cpp	(revision 2545)
+++ TmpPanel.cpp	(working copy)
@@ -13,7 +13,7 @@
 struct PluginStartupInfo Info;
 struct FarStandardFunctions FSF;
 BOOL IsOldFAR;
-
+TCHAR StartupCurDir[MAX_PATH];
 PluginPanels CommonPanels[COMMONPANELSNUMBER];
 
 #if defined(__GNUC__)
@@ -85,6 +85,8 @@
   HANDLE hPlugin=INVALID_HANDLE_VALUE;
 
   GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
 
   StartupOpenFrom=OpenFrom;
   if(OpenFrom==OPEN_COMMANDLINE)
@@ -166,6 +168,48 @@
   {
     hPlugin=new TmpPanel();
     if(hPlugin==NULL) return(INVALID_HANDLE_VALUE);
+
+    // ������� [x] in mode Branch
+    if (Opt.AddToPluginsMenu && Opt.Branch && OpenFrom==OPEN_PLUGINSMENU)
+    {
+      PanelInfo PInfo;
+#ifndef UNICODE
+      if (!Info.Control(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, &PInfo))
+#else
+      if (!Info.Control(PANEL_ACTIVE,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo))
+#endif
+        return(INVALID_HANDLE_VALUE);
+
+      ((TmpPanel *)hPlugin)->FindSearchResultsPanel();
+      if (Opt.Mode)
+      {
+        FreePanelItems(CommonPanels[CurrentCommonPanel].Items,
+                       CommonPanels[CurrentCommonPanel].ItemsNumber);
+        CommonPanels[CurrentCommonPanel].Items=(PluginPanelItem*)malloc(sizeof(PluginPanelItem));
+        CommonPanels[CurrentCommonPanel].ItemsNumber=0;
+      }
+      HANDLE hScreen = ((TmpPanel *)hPlugin)->BeginPutFiles();
+      for (int i=0; i<PInfo.SelectedItemsNumber; i++)
+      {
+#ifndef UNICODE
+        if (!((TmpPanel *)hPlugin)->PutOneFile(PInfo.SelectedItems[i]))
+        {
+#else
+        PluginPanelItem PPI;
+        Info.Control(PANEL_ACTIVE, FCTL_GETSELECTEDPANELITEM,i,(LONG_PTR)&PPI);
+        if (!((TmpPanel *)hPlugin)->PutOneFile(PPI))
+        {
+          Info.Control(PANEL_ACTIVE, FCTL_FREEPANELITEM,i,(LONG_PTR)&PPI);
+#endif
+          ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, false);
+           return(INVALID_HANDLE_VALUE);
+        }
+#ifdef UNICODE
+        Info.Control(PANEL_ACTIVE, FCTL_FREEPANELITEM,i,(LONG_PTR)&PPI);
+#endif
+      }
+      ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, true);
+    }
   }
   return(hPlugin);
 }
@@ -401,6 +445,7 @@
   ReadFileList (Name, &argc, &argv WITH_ANSI_ARG);
 
   FarMenuItem *fmi=(FarMenuItem*)malloc(argc*sizeof(FarMenuItem));
+  memset(fmi,0,argc*sizeof(FarMenuItem));
   if(fmi)
   {
     TCHAR TMP[MAX_PATH];
@@ -498,6 +543,9 @@
     return(INVALID_HANDLE_VALUE);
 #undef PNAME_ARG
 
+  //save PanelMode
+  GetOptions();
+
   if(!Opt.MenuForFilelist)
   {
     HANDLE hPlugin=new TmpPanel();
@@ -548,7 +596,7 @@
   Info->DiskMenuNumbers=DiskMenuNumbers;
   Info->DiskMenuStringsNumber=Opt.AddToDisksMenu?ArraySize(DiskMenuStrings):0;
   static const TCHAR *PluginMenuStrings[1];
-  PluginMenuStrings[0]=GetMsg(MTempPanel);
+  PluginMenuStrings[0]=Opt.Branch?GetMsg(MPluginMenuStringBranch):GetMsg(MTempPanel);
   Info->PluginMenuStrings=Opt.AddToPluginsMenu?PluginMenuStrings:NULL;
   Info->PluginMenuStringsNumber=Opt.AddToPluginsMenu?ArraySize(PluginMenuStrings):0;
   static const TCHAR *PluginCfgStrings[1];
@@ -610,8 +658,8 @@
 int WINAPI EXP_NAME(GetMinFarVersion)(void)
 {
 #ifndef UNICODE
-  return(MAKEFARVERSION(1,70,1024));
+  return(MAKEFARVERSION(1,70,2087));
 #else
-  return(MAKEFARVERSION(1,80,557));
+  return(MAKEFARVERSION(2,0,753));
 #endif
 }
Index: TmpRus.hlf
===================================================================
--- TmpRus.hlf	(revision 2545)
+++ TmpRus.hlf	(working copy)
@@ -72,6 +72,10 @@
  #�������� � ���� ��������#
    ����蠥� ���������� � ���� ���譨� ���㫥� �㭪� "�६����� ������".
 
+ #� ०��� "���� ��⠫���"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #�ᯮ�짮���� ����� ������#
    �� ���� ࠧ�蠥� �ᯮ�짮����� ��饩 �६����� ������,
 ᮤ�ন��� ���ன ��࠭���� �� �� �����⨨.
@@ -114,6 +118,9 @@
    �� ����⨨ #Enter# �� ����� ������, �� ��饬�� ॠ���
 ������ 䠩��, ��� ����� �㤥� ᪮��஢�� � ��������� ��ப� FAR.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #����஢��� ᮤ�ন��� �����# :
    �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
 ������ �� ����� � ��⠫����� ����஢����� ᮤ�ঠ騥�� � ��� 䠩��.
@@ -160,6 +167,12 @@
 �६����� ������. ����� ��ࠧ��, ����� ��࠭��� १����� ��᪮�쪨�
 ����権 ���᪠ � ࠡ���� � ���� �����६����.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #���� �������#    #���� ������� ��ப� �����#,
  #��ਭ� �������#  #��ਭ� ������� ��ப� �����#
  #[ ] ������࠭�� ०��# : ~+full~@CMD@
Index: TmpEng.hlf
===================================================================
--- TmpEng.hlf	(revision 2545)
+++ TmpEng.hlf	(working copy)
@@ -72,6 +72,10 @@
  #Add to plugins menu#
    Enables adding the "Temporary" item to the plugins menu.
 
+ #In mode "Branch"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #Use common panel#
    When enabled, a common temporary panel is created and its contents is
 stored even after closing the panel. When this option is not enabled,
@@ -112,6 +116,9 @@
    When #Enter# is pressed on an element that is not a real file name,
 its text will be copied to the FAR command line.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #Copy folders contents#
    When copying folders to the temporary panel, controls whether
 files are also copied to the panel. If set to the undefined state
@@ -156,6 +163,12 @@
 This allows to save the results of multiple search operations and work
 with them at the same time.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #Column types#    #Status line column types#
  #Column widths#   #Status line column widths#
  #[ ] Full screen mode# : ~+full~@CMD@
Index: TmpPanel.hpp
===================================================================
--- TmpPanel.hpp	(revision 2545)
+++ TmpPanel.hpp	(working copy)
@@ -42,7 +42,7 @@
 
 extern int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 extern TCHAR PluginRootKey[80];
-
+extern TCHAR StartupCurDir[MAX_PATH];
 const TCHAR *GetMsg(int MsgId);
 void InitDialogItems(const MyInitDialogItem *Init,struct FarDialogItem *Item,int ItemsNumber);
 
Index: TmpCfg.hpp
===================================================================
--- TmpCfg.hpp	(revision 2545)
+++ TmpCfg.hpp	(working copy)
@@ -5,6 +5,7 @@
 {
   int AddToDisksMenu;
   int AddToPluginsMenu;
+  int Branch;
   int CommonPanel;
   int SafeModePanel;
   int AnyInPanel;
@@ -12,7 +13,10 @@
   int Mode;
   int MenuForFilelist;
   int NewPanelForSearchResults;
+  int ShowDir;
+  int SelectedShowDir;
   int FullScreenPanel;
+  int PanelMode;
   int LastSearchResultsPanel;
   int SelectedCopyContents;
   TCHAR ColumnTypes[64];
Index: TmpClass.cpp
===================================================================
--- TmpClass.cpp	(revision 2545)
+++ TmpClass.cpp	(working copy)
@@ -32,7 +32,7 @@
   IfOptCommonPanel();
 #ifndef UNICODE
   struct PanelInfo PInfo;
-  Info.Control(this,FCTL_GETPANELINFO,&PInfo);
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
   UpdateItems(IsOwnersDisplayed (PInfo.ColumnTypes),IsLinksDisplayed (PInfo.ColumnTypes));
 #else
   int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
@@ -82,7 +82,8 @@
 
   Info->PanelModesArray=PanelModesArray;
   Info->PanelModesNumber=ArraySize(PanelModesArray);
-  Info->StartPanelMode=_T('4');
+  // save PanelMode
+  Info->StartPanelMode=(Opt.FullScreenPanel!=StartupOptFullScreenPanel?_T('4'):Opt.PanelMode);
   static struct KeyBarTitles KeyBar;
   memset(&KeyBar,0,sizeof(KeyBar));
   KeyBar.Titles[7-1]=(TCHAR*)GetMsg(MF7);
@@ -96,18 +97,16 @@
 
 int TmpPanel::SetDirectory(const TCHAR *Dir,int OpMode)
 {
-  if((OpMode & OPM_FIND)/* || lstrcmp(Dir,_T("\\"))==0*/)
+  if(OpMode & OPM_FIND)
     return(FALSE);
   if(lstrcmp(Dir,_T("\\"))==0)
 #ifndef UNICODE
     Info.Control(this,FCTL_CLOSEPLUGIN,(void*)NULL);
+  else
+    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
 #else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,NULL);
-#endif
   else
-#ifndef UNICODE
-    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
-#else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,(LONG_PTR)Dir);
 #endif
   return(TRUE);
@@ -135,6 +134,7 @@
 {
   IfOptCommonPanel();
   Opt.SelectedCopyContents = Opt.CopyContents;
+  Opt.SelectedShowDir=Opt.ShowDir;
 
   HANDLE hScreen=Info.SaveScreen(0,0,-1,-1);
   const TCHAR *MsgItems[]={GetMsg(MTempPanel),GetMsg(MTempSendFiles)};
@@ -188,6 +188,14 @@
     lstrcat(wp, PanelItem.FindData.lpwszFileName);
     CurPanelItem->FindData.lpwszFileName = wp;
 #endif
+     // add [ ] ShowDir
+    if (Opt.SelectedShowDir==2 && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+    {
+      const TCHAR *MsgItems[]={GetMsg(MWarning),GetMsg(MShowDirMsg)};
+      Opt.SelectedShowDir=!Info.Message(Info.ModuleNumber,FMSG_MB_YESNO,_T("Config"),MsgItems,
+          sizeof(MsgItems)/sizeof(MsgItems[0]),0);
+    }
+
     if(Opt.SelectedCopyContents && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
     {
       if (Opt.SelectedCopyContents==2)
@@ -340,9 +348,17 @@
 {
   struct PluginPanelItem *CurItem=TmpPanelItem;
   for(int i=0;i<TmpItemsNumber-1;i++,CurItem++)
-    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0)
+  {
+    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0
+       // add [ ] ShowDir
+       || ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            && lstrcmp(CurItem->FindData.cFileName, _T("..")) )  )
       CurItem->Flags|=REMOVE_FLAG;
-    RemoveEmptyItems();
+  }
+  if ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+        && lstrcmp(CurItem->FindData.cFileName, _T("..")) )
+    CurItem->Flags|=REMOVE_FLAG;
+  RemoveEmptyItems();
 }
 
 
@@ -488,14 +504,18 @@
 
 int TmpPanel::ProcessEvent(int Event,void *)
 {
+  struct PanelInfo PInfo;
+#ifndef UNICODE
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
+#else
+  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
+#endif
+
   if(Event==FE_CHANGEVIEWMODE)
   {
-    IfOptCommonPanel();
 #ifndef UNICODE
-    struct PanelInfo PInfo;
-    Info.Control(this,FCTL_GETPANELINFO,&PInfo);
-		int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
-		int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
+    int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
+    int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
 #else
     int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
     wchar_t* ColumnTypes=new wchar_t[Size];
@@ -518,21 +538,32 @@
 #endif
     }
   }
+  // save PanelMode
+  else if (Event==FE_CLOSE)
+  {
+    PInfo.ViewMode += 0x30;
+    HKEY hKey; DWORD Disposition;
+    if (Opt.FullScreenPanel==StartupOptFullScreenPanel && RegCreateKeyEx(HKEY_CURRENT_USER,
+          PluginRootKey,0,NULL,0,KEY_WRITE,NULL, &hKey,&Disposition)==ERROR_SUCCESS)
+    {
+      RegSetValueEx(hKey,_T("PanelMode"),0,REG_DWORD,(LPBYTE)&PInfo.ViewMode,sizeof(int));
+      RegCloseKey(hKey);
+    }
+  }
   return(FALSE);
 }
 
 
 int TmpPanel::IsCurrentFileCorrect (TCHAR *pCurFileName)
 {
-  struct PanelInfo PInfo;
   TCHAR CurFileName[NM];
 #ifndef UNICODE
+  struct PanelInfo PInfo;
   Info.Control(this,FCTL_GETPANELINFO,&PInfo);
   lstrcpy(CurFileName, PInfo.PanelItems[PInfo.CurrentItem].FindData.cFileName);
 #else
-  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
   PluginPanelItem PPI;
-  Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,(LONG_PTR)&PPI);
+  Info.Control(this,FCTL_GETCURRENTPANELITEM,0,(LONG_PTR)&PPI);
   lstrcpy(CurFileName,PPI.FindData.lpwszFileName);
   Info.Control(this,FCTL_FREEPANELITEM,0,(LONG_PTR)&PPI);
 #endif
@@ -581,16 +612,13 @@
 
         if (PInfo.PanelItems[PInfo.CurrentItem].FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
         {
+          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
 #else
         PluginPanelItem PPI;
         Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,(LONG_PTR)&PPI);
         if(PPI.FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
         {
           Info.Control(this,FCTL_FREEPANELITEM,0,(LONG_PTR)&PPI);
-#endif
-#ifndef UNICODE
-          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
-#else
           Info.Control(PANEL_PASSIVE, FCTL_SETPANELDIR,0,(LONG_PTR)&CurFileName);
 #endif
         }
@@ -612,10 +640,11 @@
       return(TRUE);
   }
 
-  if(ControlState==0 && Key==VK_RETURN && Opt.AnyInPanel)
+  if(ControlState==0 && Key==VK_RETURN)
   {
     TCHAR CurFileName [NM];
-    if (!IsCurrentFileCorrect (CurFileName))
+    BOOL Ret;
+    if (!(Ret=IsCurrentFileCorrect(CurFileName)) && Opt.AnyInPanel)
     {
 #ifndef UNICODE
       Info.Control(this,FCTL_SETCMDLINE,&CurFileName);
@@ -624,6 +653,12 @@
 #endif
       return(TRUE);
     }
+    // �� ���� � ������ �� <..> ������� ������ �����
+    if (Ret && !lstrcmp(CurFileName,_T("..")))
+    {
+      SetDirectory(StartupCurDir,0);
+      return(TRUE);
+    }
   }
 
   if (Opt.SafeModePanel && ControlState == PKF_CONTROL && Key == VK_PRIOR)
Index: TmpEng.lng
===================================================================
--- TmpEng.lng	(revision 2545)
+++ TmpEng.lng	(working copy)
@@ -9,6 +9,7 @@
 " %sTemporary panel [%d] "
 
 "temporary"
+"Temporary panel - branch"
 
 "Remove"
 "Switch"
@@ -23,8 +24,9 @@
 
 "Temporary panel"
 "Add to &Disks menu"
-"Disks menu &hotkey ('1'-'9'). Leave empty to autoassign"
+"Disks menu &hotkey ('1'-'9')"
 "Add to &Plugins menu"
+"In mode "&Branch""
 
 "Use &common panel"
 "&Safe panel mode"
@@ -33,6 +35,7 @@
 "&Replace files with file list"
 "&Menu from file list"
 "Copy folder c&ontents"
+"Show fold&ers in panel"
 
 "F&ull screen mode"
 
@@ -49,3 +52,4 @@
 "Save file list as"
 
 "Copy folder contents?"
+"Show folders in panel?"
\ No newline at end of file
Index: TmpRus.lng
===================================================================
--- TmpRus.lng	(revision 2545)
+++ TmpRus.lng	(working copy)
@@ -9,6 +9,7 @@
 " %s�६����� ������ [%d] "
 
 "�६�����"
+"�६����� ������ - ���� ��⠫���"
 
 "�����"
 "�롮�"
@@ -23,8 +24,9 @@
 
 "�६����� ������"
 "�������� � ���� &��᪮�"
-"&������ ����㯠 ('1'-'9'). �᫨ �� �������, �����砥��� ᠬ�"
+"&������ ����㯠 ('1'-'9')"
 "�������� � ���� &��������"
+"� ०��� "&���� ��⠫���""
 
 "�ᯮ�짮���� &����� ������"
 "&�������� ०�� ������"
@@ -33,6 +35,7 @@
 ""&������" ��� 䠩��-ᯨ᪠"
 "&���� �� 䠩��-ᯨ᪠"
 "����஢��� �&���ন��� �����"
+"�⮡�&���� ����� �� ������"
 
 "�����&�࠭�� ०��"
 
@@ -49,3 +52,4 @@
 "���࠭��� ᯨ᮪ ���"
 
 "����஢��� ᮤ�ন��� �����?"
+"�⮡ࠦ��� ����� �� ������?"
Index: TmpClass.hpp
===================================================================
--- TmpClass.hpp	(revision 2545)
+++ TmpClass.hpp	(working copy)
@@ -23,7 +23,6 @@
     void ProcessSaveListKey();
     void ProcessPanelSwitchMenu();
     void SwitchToPanel (int NewPanelIndex);
-    void FindSearchResultsPanel();
     void SaveListFile (const TCHAR *Path);
     int IsCurrentFileCorrect (TCHAR *pCurFileName);
 
@@ -45,7 +44,7 @@
     HANDLE BeginPutFiles();
     void CommitPutFiles (HANDLE hRestoreScreen, int Success);
     int PutOneFile (PluginPanelItem &PanelItem);
-
+    void FindSearchResultsPanel();
     int SetFindList(const struct PluginPanelItem *PanelItem,int ItemsNumber);
     int ProcessEvent(int Event,void *Param);
     int ProcessKey(int Key,unsigned int ControlState);
!work2.diff (25,763 bytes)   

2009-02-03 15:46

 

!work3.diff (25,870 bytes)   
Index: TmpPanel.rc
===================================================================
--- TmpPanel.rc	(revision 2545)
+++ TmpPanel.rc	(working copy)
@@ -1,6 +1,6 @@
 #include "farversion.hpp"
 
-#define PLUGIN_BUILD 46
+#define PLUGIN_BUILD 47
 #define PLUGIN_DESC "Temp Panel for FAR Manager"
 #define PLUGIN_NAME "TmpPanel"
 #define PLUGIN_FILENAME "TmpPanel.dll"
Index: TmpLng.hpp
===================================================================
--- TmpLng.hpp	(revision 2545)
+++ TmpLng.hpp	(working copy)
@@ -12,6 +12,7 @@
   MTempPanelTitleNum,
 
   MDiskMenuString,
+  MPluginMenuStringBranch,
 
   MF7,
   MAltShiftF12,
@@ -28,6 +29,7 @@
   MConfigAddToDisksMenu,
   MConfigDisksMenuDigit,
   MConfigAddToPluginsMenu,
+  MConfigPluginsMenuBranch,
 
   MConfigCommonPanel,
   MSafeModePanel,
@@ -36,6 +38,7 @@
   MReplaceInFilelist,
   MMenuForFilelist,
   MCopyContens,
+  MShowDir,
 
   MFullScreenPanel,
 
@@ -51,7 +54,8 @@
   MNewPanelForSearchResults,
   MListFilePath,
 
-  MCopyContensMsg
+  MCopyContensMsg,
+  MShowDirMsg
 };
 
 #endif /* __TMPLNG_HPP__ */
Index: TmpCfg.cpp
===================================================================
--- TmpCfg.cpp	(revision 2545)
+++ TmpCfg.cpp	(working copy)
@@ -19,6 +19,7 @@
 {
   AddToDisksMenu,
   AddToPluginsMenu,
+  Branch,
   CommonPanel,
   SafeModePanel,
   AnyInPanel,
@@ -26,6 +27,7 @@
   Mode,
   MenuForFilelist,
   NewPanelForSearchResults,
+  ShowDir,
   FullScreenPanel,
   ColumnTypes,
   ColumnWidths,
@@ -38,11 +40,11 @@
 
 options_t Opt;
 
-static const TCHAR REGStr[17][8]=
+static const TCHAR REGStr[19][8]=
 {
- _T("InDisks"), _T("InPlug"),
+ _T("InDisks"), _T("InPlug"), _T("Branch"),
  _T("Common"),  _T("Safe"),   _T("Any"),    _T("Contens"),
- _T("Mode"),    _T("Menu"),   _T("NewP"),
+ _T("Mode"),    _T("Menu"),   _T("NewP"),   _T("Dir"),
  _T("Full"),
  _T("ColT"),    _T("ColW"),   _T("StatT"),  _T("StatW"),
  _T("DigitV"),  _T("Mask"),   _T("Prefix")
@@ -58,37 +60,40 @@
 static const struct COptionsList OptionsList[]={
   {&Opt.AddToDisksMenu    , _T("")          ,  1},
   {&Opt.AddToPluginsMenu  , _T("")          ,  4},
+  {&Opt.Branch            , _T("")          ,  5},
 
-  {&Opt.CommonPanel       , _T("")          ,  6},
-  {&Opt.SafeModePanel     , NULL            ,  7},
-  {&Opt.AnyInPanel        , NULL            ,  8},
-  {&Opt.CopyContents      , NULL            ,  9},
-  {&Opt.Mode              , _T("")          , 10},
-  {&Opt.MenuForFilelist   , NULL            , 11},
-  {&Opt.NewPanelForSearchResults, NULL      , 12},
+  {&Opt.CommonPanel       , _T("")          ,  7},
+  {&Opt.SafeModePanel     , NULL            ,  8},
+  {&Opt.AnyInPanel        , NULL            ,  9},
+  {&Opt.CopyContents      , NULL            , 10},
+  {&Opt.Mode              , _T("")          , 11},
+  {&Opt.MenuForFilelist   , NULL            , 12},
+  {&Opt.NewPanelForSearchResults, NULL      , 13},
+  {&Opt.ShowDir           , _T("")          , 14},
 
-  {&Opt.FullScreenPanel   , NULL            , 22},
+  {&Opt.FullScreenPanel   , NULL            , 24},
 
-  {Opt.ColumnTypes        , _T("N,S")       , 15},
-  {Opt.ColumnWidths       , _T("0,8")       , 17},
-  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 19},
-  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 21},
+  {Opt.ColumnTypes        , _T("N,S")       , 17},
+  {Opt.ColumnWidths       , _T("0,8")       , 19},
+  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 21},
+  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 23},
 
   {Opt.DisksMenuDigit     , _T("1")         ,  2},
-  {Opt.Mask               , _T("*.temp")    , 25},
-  {Opt.Prefix             , _T("tmp")       , 27},
+  {Opt.Mask               , _T("*.temp")    , 27},
+  {Opt.Prefix             , _T("tmp")       , 29},
 };
 
 int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 
 void GetOptions(void)
 {
+  DWORD Type,Size,IntValueData;
+  TCHAR StrValueData[256];
+  HKEY hKey;
+  RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
+
   for(int i=AddToDisksMenu;i<=Prefix;i++)
   {
-    DWORD Type,Size,IntValueData;
-    TCHAR StrValueData[256];
-    HKEY hKey;
-    RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
     if (i<ColumnTypes)
     {
       Size=sizeof(IntValueData);
@@ -105,8 +110,14 @@
         RegQueryValueEx(hKey,REGStr[i],0,&Type,(BYTE*)StrValueData,&Size)==ERROR_SUCCESS?
         (TCHAR*)StrValueData:OptionsList[i].pStr);
     }
-    RegCloseKey(hKey);
   }
+  //save PanelMode
+  Size=sizeof(IntValueData); Type=REG_DWORD;
+  Opt.PanelMode=0x34;
+  if (RegQueryValueEx(hKey, _T("PanelMode"),0,&Type,(BYTE *)&IntValueData,&Size)==ERROR_SUCCESS)
+    Opt.PanelMode=(IntValueData>=0x30 && IntValueData<=0x39?IntValueData:0x34);
+
+  RegCloseKey(hKey);
 }
 
 const int DIALOG_WIDTH = 78;
@@ -122,46 +133,48 @@
   /* 2*/ {DI_FIXEDIT,   7, 3,  7, 3, 0, -1},
   /* 3*/ {DI_TEXT,      9, 3,  0, 0, 0, MConfigDisksMenuDigit},
   /* 4*/ {DI_CHECKBOX, DC, 2,  0, 0, 0, MConfigAddToPluginsMenu},
-  /* 5*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /* 5*/ {DI_CHECKBOX,DC+3,3,  0, 0, 0, MConfigPluginsMenuBranch},
+  /* 6*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /* 6*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
-  /* 7*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
-  /* 8*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
-  /* 9*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
-  /*10*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
-  /*11*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
-  /*12*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /* 7*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
+  /* 8*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
+  /* 9*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
+  /*10*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
+  /*11*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
+  /*12*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
+  /*13*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /*14*/ {DI_CHECKBOX, DC, 8,  0, 0, DIF_3STATE, MShowDir},
 
-  /*13*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*15*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*14*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
-  /*15*/ {DI_EDIT,      5,11, 36,11, 0, -1},
-  /*16*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
-  /*17*/ {DI_EDIT,      5,13, 36,13, 0, -1},
-  /*18*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
-  /*19*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
-  /*20*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
-  /*21*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
-  /*22*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
+  /*16*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
+  /*17*/ {DI_EDIT,      5,11, 36,11, 0, -1},
+  /*18*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
+  /*19*/ {DI_EDIT,      5,13, 36,13, 0, -1},
+  /*20*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
+  /*21*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
+  /*22*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
+  /*23*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
+  /*24*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
 
-  /*23*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*25*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*24*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
-  /*25*/ {DI_EDIT,      5,17, 36,17, 0, -1},
-  /*26*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
-  /*27*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
+  /*26*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
+  /*27*/ {DI_EDIT,      5,17, 36,17, 0, -1},
+  /*28*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
+  /*29*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
 
-  /*28*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*30*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*29*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
-  /*30*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
+  /*31*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
+  /*32*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
   };
 
   int i;
   struct FarDialogItem DialogItems[ArraySize(InitItems)];
 
   InitDialogItems(InitItems,DialogItems,ArraySize(InitItems));
-  DialogItems[29].DefaultButton=1;
+  DialogItems[31].DefaultButton=1;
   DialogItems[2].Focus=1;
 
   GetOptions();
Index: TmpPanel.cpp
===================================================================
--- TmpPanel.cpp	(revision 2545)
+++ TmpPanel.cpp	(working copy)
@@ -13,7 +13,7 @@
 struct PluginStartupInfo Info;
 struct FarStandardFunctions FSF;
 BOOL IsOldFAR;
-
+TCHAR StartupCurDir[MAX_PATH];
 PluginPanels CommonPanels[COMMONPANELSNUMBER];
 
 #if defined(__GNUC__)
@@ -85,6 +85,8 @@
   HANDLE hPlugin=INVALID_HANDLE_VALUE;
 
   GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
 
   StartupOpenFrom=OpenFrom;
   if(OpenFrom==OPEN_COMMANDLINE)
@@ -166,6 +168,48 @@
   {
     hPlugin=new TmpPanel();
     if(hPlugin==NULL) return(INVALID_HANDLE_VALUE);
+
+    // ������� [x] in mode Branch
+    if (Opt.AddToPluginsMenu && Opt.Branch && OpenFrom==OPEN_PLUGINSMENU)
+    {
+      PanelInfo PInfo;
+#ifndef UNICODE
+      if (!Info.Control(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, &PInfo))
+#else
+      if (!Info.Control(PANEL_ACTIVE,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo))
+#endif
+        return(INVALID_HANDLE_VALUE);
+
+      ((TmpPanel *)hPlugin)->FindSearchResultsPanel();
+      if (Opt.Mode)
+      {
+        FreePanelItems(CommonPanels[CurrentCommonPanel].Items,
+                       CommonPanels[CurrentCommonPanel].ItemsNumber);
+        CommonPanels[CurrentCommonPanel].Items=(PluginPanelItem*)malloc(sizeof(PluginPanelItem));
+        CommonPanels[CurrentCommonPanel].ItemsNumber=0;
+      }
+      HANDLE hScreen = ((TmpPanel *)hPlugin)->BeginPutFiles();
+      for (int i=0; i<PInfo.SelectedItemsNumber; i++)
+      {
+#ifndef UNICODE
+        if (!((TmpPanel *)hPlugin)->PutOneFile(PInfo.SelectedItems[i]))
+        {
+#else
+        PluginPanelItem PPI;
+        Info.Control(PANEL_ACTIVE, FCTL_GETSELECTEDPANELITEM,i,(LONG_PTR)&PPI);
+        if (!((TmpPanel *)hPlugin)->PutOneFile(PPI))
+        {
+          Info.Control(PANEL_ACTIVE, FCTL_FREEPANELITEM,i,(LONG_PTR)&PPI);
+#endif
+          ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, false);
+           return(INVALID_HANDLE_VALUE);
+        }
+#ifdef UNICODE
+        Info.Control(PANEL_ACTIVE, FCTL_FREEPANELITEM,i,(LONG_PTR)&PPI);
+#endif
+      }
+      ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, true);
+    }
   }
   return(hPlugin);
 }
@@ -401,6 +445,7 @@
   ReadFileList (Name, &argc, &argv WITH_ANSI_ARG);
 
   FarMenuItem *fmi=(FarMenuItem*)malloc(argc*sizeof(FarMenuItem));
+  memset(fmi,0,argc*sizeof(FarMenuItem));
   if(fmi)
   {
     TCHAR TMP[MAX_PATH];
@@ -498,6 +543,11 @@
     return(INVALID_HANDLE_VALUE);
 #undef PNAME_ARG
 
+  //save PanelMode
+  GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
+
   if(!Opt.MenuForFilelist)
   {
     HANDLE hPlugin=new TmpPanel();
@@ -548,7 +598,7 @@
   Info->DiskMenuNumbers=DiskMenuNumbers;
   Info->DiskMenuStringsNumber=Opt.AddToDisksMenu?ArraySize(DiskMenuStrings):0;
   static const TCHAR *PluginMenuStrings[1];
-  PluginMenuStrings[0]=GetMsg(MTempPanel);
+  PluginMenuStrings[0]=Opt.Branch?GetMsg(MPluginMenuStringBranch):GetMsg(MTempPanel);
   Info->PluginMenuStrings=Opt.AddToPluginsMenu?PluginMenuStrings:NULL;
   Info->PluginMenuStringsNumber=Opt.AddToPluginsMenu?ArraySize(PluginMenuStrings):0;
   static const TCHAR *PluginCfgStrings[1];
@@ -610,8 +660,8 @@
 int WINAPI EXP_NAME(GetMinFarVersion)(void)
 {
 #ifndef UNICODE
-  return(MAKEFARVERSION(1,70,1024));
+  return(MAKEFARVERSION(1,70,2087));
 #else
-  return(MAKEFARVERSION(1,80,557));
+  return(MAKEFARVERSION(2,0,753));
 #endif
 }
Index: TmpRus.hlf
===================================================================
--- TmpRus.hlf	(revision 2545)
+++ TmpRus.hlf	(working copy)
@@ -72,6 +72,10 @@
  #�������� � ���� ��������#
    ����蠥� ���������� � ���� ���譨� ���㫥� �㭪� "�६����� ������".
 
+ #� ०��� "���� ��⠫���"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #�ᯮ�짮���� ����� ������#
    �� ���� ࠧ�蠥� �ᯮ�짮����� ��饩 �६����� ������,
 ᮤ�ন��� ���ன ��࠭���� �� �� �����⨨.
@@ -114,6 +118,9 @@
    �� ����⨨ #Enter# �� ����� ������, �� ��饬�� ॠ���
 ������ 䠩��, ��� ����� �㤥� ᪮��஢�� � ��������� ��ப� FAR.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #����஢��� ᮤ�ন��� �����# :
    �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
 ������ �� ����� � ��⠫����� ����஢����� ᮤ�ঠ騥�� � ��� 䠩��.
@@ -160,6 +167,12 @@
 �६����� ������. ����� ��ࠧ��, ����� ��࠭��� १����� ��᪮�쪨�
 ����権 ���᪠ � ࠡ���� � ���� �����६����.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #���� �������#    #���� ������� ��ப� �����#,
  #��ਭ� �������#  #��ਭ� ������� ��ப� �����#
  #[ ] ������࠭�� ०��# : ~+full~@CMD@
Index: TmpEng.hlf
===================================================================
--- TmpEng.hlf	(revision 2545)
+++ TmpEng.hlf	(working copy)
@@ -72,6 +72,10 @@
  #Add to plugins menu#
    Enables adding the "Temporary" item to the plugins menu.
 
+ #In mode "Branch"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #Use common panel#
    When enabled, a common temporary panel is created and its contents is
 stored even after closing the panel. When this option is not enabled,
@@ -112,6 +116,9 @@
    When #Enter# is pressed on an element that is not a real file name,
 its text will be copied to the FAR command line.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #Copy folders contents#
    When copying folders to the temporary panel, controls whether
 files are also copied to the panel. If set to the undefined state
@@ -156,6 +163,12 @@
 This allows to save the results of multiple search operations and work
 with them at the same time.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #Column types#    #Status line column types#
  #Column widths#   #Status line column widths#
  #[ ] Full screen mode# : ~+full~@CMD@
Index: TmpPanel.hpp
===================================================================
--- TmpPanel.hpp	(revision 2545)
+++ TmpPanel.hpp	(working copy)
@@ -42,7 +42,7 @@
 
 extern int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 extern TCHAR PluginRootKey[80];
-
+extern TCHAR StartupCurDir[MAX_PATH];
 const TCHAR *GetMsg(int MsgId);
 void InitDialogItems(const MyInitDialogItem *Init,struct FarDialogItem *Item,int ItemsNumber);
 
Index: TmpCfg.hpp
===================================================================
--- TmpCfg.hpp	(revision 2545)
+++ TmpCfg.hpp	(working copy)
@@ -5,6 +5,7 @@
 {
   int AddToDisksMenu;
   int AddToPluginsMenu;
+  int Branch;
   int CommonPanel;
   int SafeModePanel;
   int AnyInPanel;
@@ -12,7 +13,10 @@
   int Mode;
   int MenuForFilelist;
   int NewPanelForSearchResults;
+  int ShowDir;
+  int SelectedShowDir;
   int FullScreenPanel;
+  int PanelMode;
   int LastSearchResultsPanel;
   int SelectedCopyContents;
   TCHAR ColumnTypes[64];
Index: TmpClass.cpp
===================================================================
--- TmpClass.cpp	(revision 2545)
+++ TmpClass.cpp	(working copy)
@@ -32,7 +32,7 @@
   IfOptCommonPanel();
 #ifndef UNICODE
   struct PanelInfo PInfo;
-  Info.Control(this,FCTL_GETPANELINFO,&PInfo);
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
   UpdateItems(IsOwnersDisplayed (PInfo.ColumnTypes),IsLinksDisplayed (PInfo.ColumnTypes));
 #else
   int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
@@ -82,7 +82,8 @@
 
   Info->PanelModesArray=PanelModesArray;
   Info->PanelModesNumber=ArraySize(PanelModesArray);
-  Info->StartPanelMode=_T('4');
+  // save PanelMode
+  Info->StartPanelMode=(Opt.FullScreenPanel!=StartupOptFullScreenPanel?_T('4'):Opt.PanelMode);
   static struct KeyBarTitles KeyBar;
   memset(&KeyBar,0,sizeof(KeyBar));
   KeyBar.Titles[7-1]=(TCHAR*)GetMsg(MF7);
@@ -96,18 +97,16 @@
 
 int TmpPanel::SetDirectory(const TCHAR *Dir,int OpMode)
 {
-  if((OpMode & OPM_FIND)/* || lstrcmp(Dir,_T("\\"))==0*/)
+  if(OpMode & OPM_FIND)
     return(FALSE);
   if(lstrcmp(Dir,_T("\\"))==0)
 #ifndef UNICODE
     Info.Control(this,FCTL_CLOSEPLUGIN,(void*)NULL);
+  else
+    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
 #else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,NULL);
-#endif
   else
-#ifndef UNICODE
-    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
-#else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,(LONG_PTR)Dir);
 #endif
   return(TRUE);
@@ -135,6 +134,7 @@
 {
   IfOptCommonPanel();
   Opt.SelectedCopyContents = Opt.CopyContents;
+  Opt.SelectedShowDir=Opt.ShowDir;
 
   HANDLE hScreen=Info.SaveScreen(0,0,-1,-1);
   const TCHAR *MsgItems[]={GetMsg(MTempPanel),GetMsg(MTempSendFiles)};
@@ -188,6 +188,14 @@
     lstrcat(wp, PanelItem.FindData.lpwszFileName);
     CurPanelItem->FindData.lpwszFileName = wp;
 #endif
+     // add [ ] ShowDir
+    if (Opt.SelectedShowDir==2 && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+    {
+      const TCHAR *MsgItems[]={GetMsg(MWarning),GetMsg(MShowDirMsg)};
+      Opt.SelectedShowDir=!Info.Message(Info.ModuleNumber,FMSG_MB_YESNO,_T("Config"),MsgItems,
+          sizeof(MsgItems)/sizeof(MsgItems[0]),0);
+    }
+
     if(Opt.SelectedCopyContents && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
     {
       if (Opt.SelectedCopyContents==2)
@@ -340,9 +348,17 @@
 {
   struct PluginPanelItem *CurItem=TmpPanelItem;
   for(int i=0;i<TmpItemsNumber-1;i++,CurItem++)
-    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0)
+  {
+    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0
+       // add [ ] ShowDir
+       || ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            && lstrcmp(CurItem->FindData.cFileName, _T("..")) )  )
       CurItem->Flags|=REMOVE_FLAG;
-    RemoveEmptyItems();
+  }
+  if ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+        && lstrcmp(CurItem->FindData.cFileName, _T("..")) )
+    CurItem->Flags|=REMOVE_FLAG;
+  RemoveEmptyItems();
 }
 
 
@@ -488,14 +504,18 @@
 
 int TmpPanel::ProcessEvent(int Event,void *)
 {
+  struct PanelInfo PInfo;
+#ifndef UNICODE
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
+#else
+  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
+#endif
+
   if(Event==FE_CHANGEVIEWMODE)
   {
-    IfOptCommonPanel();
 #ifndef UNICODE
-    struct PanelInfo PInfo;
-    Info.Control(this,FCTL_GETPANELINFO,&PInfo);
-		int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
-		int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
+    int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
+    int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
 #else
     int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
     wchar_t* ColumnTypes=new wchar_t[Size];
@@ -518,21 +538,32 @@
 #endif
     }
   }
+  // save PanelMode
+  else if (Event==FE_CLOSE)
+  {
+    PInfo.ViewMode += 0x30;
+    HKEY hKey; DWORD Disposition;
+    if (Opt.FullScreenPanel==StartupOptFullScreenPanel && RegCreateKeyEx(HKEY_CURRENT_USER,
+          PluginRootKey,0,NULL,0,KEY_WRITE,NULL, &hKey,&Disposition)==ERROR_SUCCESS)
+    {
+      RegSetValueEx(hKey,_T("PanelMode"),0,REG_DWORD,(LPBYTE)&PInfo.ViewMode,sizeof(int));
+      RegCloseKey(hKey);
+    }
+  }
   return(FALSE);
 }
 
 
 int TmpPanel::IsCurrentFileCorrect (TCHAR *pCurFileName)
 {
-  struct PanelInfo PInfo;
   TCHAR CurFileName[NM];
 #ifndef UNICODE
+  struct PanelInfo PInfo;
   Info.Control(this,FCTL_GETPANELINFO,&PInfo);
   lstrcpy(CurFileName, PInfo.PanelItems[PInfo.CurrentItem].FindData.cFileName);
 #else
-  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
   PluginPanelItem PPI;
-  Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,(LONG_PTR)&PPI);
+  Info.Control(this,FCTL_GETCURRENTPANELITEM,0,(LONG_PTR)&PPI);
   lstrcpy(CurFileName,PPI.FindData.lpwszFileName);
   Info.Control(this,FCTL_FREEPANELITEM,0,(LONG_PTR)&PPI);
 #endif
@@ -581,16 +612,13 @@
 
         if (PInfo.PanelItems[PInfo.CurrentItem].FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
         {
+          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
 #else
         PluginPanelItem PPI;
         Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,(LONG_PTR)&PPI);
         if(PPI.FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
         {
           Info.Control(this,FCTL_FREEPANELITEM,0,(LONG_PTR)&PPI);
-#endif
-#ifndef UNICODE
-          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
-#else
           Info.Control(PANEL_PASSIVE, FCTL_SETPANELDIR,0,(LONG_PTR)&CurFileName);
 #endif
         }
@@ -612,10 +640,11 @@
       return(TRUE);
   }
 
-  if(ControlState==0 && Key==VK_RETURN && Opt.AnyInPanel)
+  if(ControlState==0 && Key==VK_RETURN)
   {
     TCHAR CurFileName [NM];
-    if (!IsCurrentFileCorrect (CurFileName))
+    BOOL Ret;
+    if (!(Ret=IsCurrentFileCorrect(CurFileName)) && Opt.AnyInPanel)
     {
 #ifndef UNICODE
       Info.Control(this,FCTL_SETCMDLINE,&CurFileName);
@@ -624,6 +653,12 @@
 #endif
       return(TRUE);
     }
+    // �� ���� � ������ �� <..> ������� ������ �����
+    if (Ret && !lstrcmp(CurFileName,_T("..")))
+    {
+      SetDirectory(StartupCurDir,0);
+      return(TRUE);
+    }
   }
 
   if (Opt.SafeModePanel && ControlState == PKF_CONTROL && Key == VK_PRIOR)
Index: TmpEng.lng
===================================================================
--- TmpEng.lng	(revision 2545)
+++ TmpEng.lng	(working copy)
@@ -9,6 +9,7 @@
 " %sTemporary panel [%d] "
 
 "temporary"
+"Temporary panel - branch"
 
 "Remove"
 "Switch"
@@ -23,8 +24,9 @@
 
 "Temporary panel"
 "Add to &Disks menu"
-"Disks menu &hotkey ('1'-'9'). Leave empty to autoassign"
+"Disks menu &hotkey ('1'-'9')"
 "Add to &Plugins menu"
+"In mode "&Branch""
 
 "Use &common panel"
 "&Safe panel mode"
@@ -33,6 +35,7 @@
 "&Replace files with file list"
 "&Menu from file list"
 "Copy folder c&ontents"
+"Show fold&ers in panel"
 
 "F&ull screen mode"
 
@@ -49,3 +52,4 @@
 "Save file list as"
 
 "Copy folder contents?"
+"Show folders in panel?"
\ No newline at end of file
Index: TmpRus.lng
===================================================================
--- TmpRus.lng	(revision 2545)
+++ TmpRus.lng	(working copy)
@@ -9,6 +9,7 @@
 " %s�६����� ������ [%d] "
 
 "�६�����"
+"�६����� ������ - ���� ��⠫���"
 
 "�����"
 "�롮�"
@@ -23,8 +24,9 @@
 
 "�६����� ������"
 "�������� � ���� &��᪮�"
-"&������ ����㯠 ('1'-'9'). �᫨ �� �������, �����砥��� ᠬ�"
+"&������ ����㯠 ('1'-'9')"
 "�������� � ���� &��������"
+"� ०��� "&���� ��⠫���""
 
 "�ᯮ�짮���� &����� ������"
 "&�������� ०�� ������"
@@ -33,6 +35,7 @@
 ""&������" ��� 䠩��-ᯨ᪠"
 "&���� �� 䠩��-ᯨ᪠"
 "����஢��� �&���ন��� �����"
+"�⮡�&���� ����� �� ������"
 
 "�����&�࠭�� ०��"
 
@@ -49,3 +52,4 @@
 "���࠭��� ᯨ᮪ ���"
 
 "����஢��� ᮤ�ন��� �����?"
+"�⮡ࠦ��� ����� �� ������?"
Index: TmpClass.hpp
===================================================================
--- TmpClass.hpp	(revision 2545)
+++ TmpClass.hpp	(working copy)
@@ -23,7 +23,6 @@
     void ProcessSaveListKey();
     void ProcessPanelSwitchMenu();
     void SwitchToPanel (int NewPanelIndex);
-    void FindSearchResultsPanel();
     void SaveListFile (const TCHAR *Path);
     int IsCurrentFileCorrect (TCHAR *pCurFileName);
 
@@ -45,7 +44,7 @@
     HANDLE BeginPutFiles();
     void CommitPutFiles (HANDLE hRestoreScreen, int Success);
     int PutOneFile (PluginPanelItem &PanelItem);
-
+    void FindSearchResultsPanel();
     int SetFindList(const struct PluginPanelItem *PanelItem,int ItemsNumber);
     int ProcessEvent(int Event,void *Param);
     int ProcessKey(int Key,unsigned int ControlState);
!work3.diff (25,870 bytes)   

samlyukov

2009-02-03 15:49

reporter   bugnote:0002382

после захода в .temp файл и выхода с панели плагина по <..> не возвращались в исходную папку - к сожалению, комплексный патч № 3, чтоб не путаться.

2009-02-21 10:41

 

!work4.diff (27,330 bytes)   
Index: TmpPanel.rc
===================================================================
--- TmpPanel.rc	(revision 2545)
+++ TmpPanel.rc	(working copy)
@@ -1,6 +1,6 @@
 #include "farversion.hpp"
 
-#define PLUGIN_BUILD 46
+#define PLUGIN_BUILD 47
 #define PLUGIN_DESC "Temp Panel for FAR Manager"
 #define PLUGIN_NAME "TmpPanel"
 #define PLUGIN_FILENAME "TmpPanel.dll"
Index: TmpLng.hpp
===================================================================
--- TmpLng.hpp	(revision 2545)
+++ TmpLng.hpp	(working copy)
@@ -12,6 +12,7 @@
   MTempPanelTitleNum,
 
   MDiskMenuString,
+  MPluginMenuStringBranch,
 
   MF7,
   MAltShiftF12,
@@ -28,6 +29,7 @@
   MConfigAddToDisksMenu,
   MConfigDisksMenuDigit,
   MConfigAddToPluginsMenu,
+  MConfigPluginsMenuBranch,
 
   MConfigCommonPanel,
   MSafeModePanel,
@@ -36,6 +38,7 @@
   MReplaceInFilelist,
   MMenuForFilelist,
   MCopyContens,
+  MShowDir,
 
   MFullScreenPanel,
 
@@ -51,7 +54,8 @@
   MNewPanelForSearchResults,
   MListFilePath,
 
-  MCopyContensMsg
+  MCopyContensMsg,
+  MShowDirMsg
 };
 
 #endif /* __TMPLNG_HPP__ */
Index: TmpCfg.cpp
===================================================================
--- TmpCfg.cpp	(revision 2545)
+++ TmpCfg.cpp	(working copy)
@@ -19,6 +19,7 @@
 {
   AddToDisksMenu,
   AddToPluginsMenu,
+  Branch,
   CommonPanel,
   SafeModePanel,
   AnyInPanel,
@@ -26,6 +27,7 @@
   Mode,
   MenuForFilelist,
   NewPanelForSearchResults,
+  ShowDir,
   FullScreenPanel,
   ColumnTypes,
   ColumnWidths,
@@ -38,11 +40,11 @@
 
 options_t Opt;
 
-static const TCHAR REGStr[17][8]=
+static const TCHAR REGStr[19][8]=
 {
- _T("InDisks"), _T("InPlug"),
+ _T("InDisks"), _T("InPlug"), _T("Branch"),
  _T("Common"),  _T("Safe"),   _T("Any"),    _T("Contens"),
- _T("Mode"),    _T("Menu"),   _T("NewP"),
+ _T("Mode"),    _T("Menu"),   _T("NewP"),   _T("Dir"),
  _T("Full"),
  _T("ColT"),    _T("ColW"),   _T("StatT"),  _T("StatW"),
  _T("DigitV"),  _T("Mask"),   _T("Prefix")
@@ -58,37 +60,40 @@
 static const struct COptionsList OptionsList[]={
   {&Opt.AddToDisksMenu    , _T("")          ,  1},
   {&Opt.AddToPluginsMenu  , _T("")          ,  4},
+  {&Opt.Branch            , _T("")          ,  5},
 
-  {&Opt.CommonPanel       , _T("")          ,  6},
-  {&Opt.SafeModePanel     , NULL            ,  7},
-  {&Opt.AnyInPanel        , NULL            ,  8},
-  {&Opt.CopyContents      , NULL            ,  9},
-  {&Opt.Mode              , _T("")          , 10},
-  {&Opt.MenuForFilelist   , NULL            , 11},
-  {&Opt.NewPanelForSearchResults, NULL      , 12},
+  {&Opt.CommonPanel       , _T("")          ,  7},
+  {&Opt.SafeModePanel     , NULL            ,  8},
+  {&Opt.AnyInPanel        , NULL            ,  9},
+  {&Opt.CopyContents      , NULL            , 10},
+  {&Opt.Mode              , _T("")          , 11},
+  {&Opt.MenuForFilelist   , NULL            , 12},
+  {&Opt.NewPanelForSearchResults, NULL      , 13},
+  {&Opt.ShowDir           , _T("")          , 14},
 
-  {&Opt.FullScreenPanel   , NULL            , 22},
+  {&Opt.FullScreenPanel   , NULL            , 24},
 
-  {Opt.ColumnTypes        , _T("N,S")       , 15},
-  {Opt.ColumnWidths       , _T("0,8")       , 17},
-  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 19},
-  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 21},
+  {Opt.ColumnTypes        , _T("N,S")       , 17},
+  {Opt.ColumnWidths       , _T("0,8")       , 19},
+  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 21},
+  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 23},
 
   {Opt.DisksMenuDigit     , _T("1")         ,  2},
-  {Opt.Mask               , _T("*.temp")    , 25},
-  {Opt.Prefix             , _T("tmp")       , 27},
+  {Opt.Mask               , _T("*.temp")    , 27},
+  {Opt.Prefix             , _T("tmp")       , 29},
 };
 
 int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 
 void GetOptions(void)
 {
+  DWORD Type,Size,IntValueData;
+  TCHAR StrValueData[256];
+  HKEY hKey;
+  RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
+
   for(int i=AddToDisksMenu;i<=Prefix;i++)
   {
-    DWORD Type,Size,IntValueData;
-    TCHAR StrValueData[256];
-    HKEY hKey;
-    RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
     if (i<ColumnTypes)
     {
       Size=sizeof(IntValueData);
@@ -105,8 +110,14 @@
         RegQueryValueEx(hKey,REGStr[i],0,&Type,(BYTE*)StrValueData,&Size)==ERROR_SUCCESS?
         (TCHAR*)StrValueData:OptionsList[i].pStr);
     }
-    RegCloseKey(hKey);
   }
+  //save PanelMode
+  Size=sizeof(IntValueData); Type=REG_DWORD;
+  Opt.PanelMode=0x34;
+  if (RegQueryValueEx(hKey, _T("PanelMode"),0,&Type,(BYTE *)&IntValueData,&Size)==ERROR_SUCCESS)
+    Opt.PanelMode=(IntValueData>=0x30 && IntValueData<=0x39?IntValueData:0x34);
+
+  RegCloseKey(hKey);
 }
 
 const int DIALOG_WIDTH = 78;
@@ -122,46 +133,48 @@
   /* 2*/ {DI_FIXEDIT,   7, 3,  7, 3, 0, -1},
   /* 3*/ {DI_TEXT,      9, 3,  0, 0, 0, MConfigDisksMenuDigit},
   /* 4*/ {DI_CHECKBOX, DC, 2,  0, 0, 0, MConfigAddToPluginsMenu},
-  /* 5*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /* 5*/ {DI_CHECKBOX,DC+3,3,  0, 0, 0, MConfigPluginsMenuBranch},
+  /* 6*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /* 6*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
-  /* 7*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
-  /* 8*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
-  /* 9*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
-  /*10*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
-  /*11*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
-  /*12*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /* 7*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
+  /* 8*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
+  /* 9*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
+  /*10*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
+  /*11*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
+  /*12*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
+  /*13*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /*14*/ {DI_CHECKBOX, DC, 8,  0, 0, DIF_3STATE, MShowDir},
 
-  /*13*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*15*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*14*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
-  /*15*/ {DI_EDIT,      5,11, 36,11, 0, -1},
-  /*16*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
-  /*17*/ {DI_EDIT,      5,13, 36,13, 0, -1},
-  /*18*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
-  /*19*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
-  /*20*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
-  /*21*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
-  /*22*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
+  /*16*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
+  /*17*/ {DI_EDIT,      5,11, 36,11, 0, -1},
+  /*18*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
+  /*19*/ {DI_EDIT,      5,13, 36,13, 0, -1},
+  /*20*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
+  /*21*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
+  /*22*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
+  /*23*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
+  /*24*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
 
-  /*23*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*25*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*24*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
-  /*25*/ {DI_EDIT,      5,17, 36,17, 0, -1},
-  /*26*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
-  /*27*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
+  /*26*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
+  /*27*/ {DI_EDIT,      5,17, 36,17, 0, -1},
+  /*28*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
+  /*29*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
 
-  /*28*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*30*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*29*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
-  /*30*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
+  /*31*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
+  /*32*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
   };
 
   int i;
   struct FarDialogItem DialogItems[ArraySize(InitItems)];
 
   InitDialogItems(InitItems,DialogItems,ArraySize(InitItems));
-  DialogItems[29].DefaultButton=1;
+  DialogItems[31].DefaultButton=1;
   DialogItems[2].Focus=1;
 
   GetOptions();
Index: TmpPanel.cpp
===================================================================
--- TmpPanel.cpp	(revision 2545)
+++ TmpPanel.cpp	(working copy)
@@ -13,7 +13,7 @@
 struct PluginStartupInfo Info;
 struct FarStandardFunctions FSF;
 BOOL IsOldFAR;
-
+TCHAR StartupCurDir[MAX_PATH];
 PluginPanels CommonPanels[COMMONPANELSNUMBER];
 
 #if defined(__GNUC__)
@@ -85,6 +85,8 @@
   HANDLE hPlugin=INVALID_HANDLE_VALUE;
 
   GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
 
   StartupOpenFrom=OpenFrom;
   if(OpenFrom==OPEN_COMMANDLINE)
@@ -166,6 +168,48 @@
   {
     hPlugin=new TmpPanel();
     if(hPlugin==NULL) return(INVALID_HANDLE_VALUE);
+
+    // ������� [x] in mode Branch
+    if (Opt.AddToPluginsMenu && Opt.Branch && OpenFrom==OPEN_PLUGINSMENU)
+    {
+      PanelInfo PInfo;
+#ifndef UNICODE
+      if (!Info.Control(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, &PInfo))
+#else
+      if (!Info.Control(PANEL_ACTIVE,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo))
+#endif
+        return(INVALID_HANDLE_VALUE);
+
+      ((TmpPanel *)hPlugin)->FindSearchResultsPanel();
+      if (Opt.Mode)
+      {
+        FreePanelItems(CommonPanels[CurrentCommonPanel].Items,
+                       CommonPanels[CurrentCommonPanel].ItemsNumber);
+        CommonPanels[CurrentCommonPanel].Items=(PluginPanelItem*)malloc(sizeof(PluginPanelItem));
+        CommonPanels[CurrentCommonPanel].ItemsNumber=0;
+      }
+      HANDLE hScreen = ((TmpPanel *)hPlugin)->BeginPutFiles();
+      for (int i=0; i<PInfo.SelectedItemsNumber; i++)
+      {
+#ifndef UNICODE
+        if (!((TmpPanel *)hPlugin)->PutOneFile(PInfo.SelectedItems[i]))
+        {
+#else
+        PluginPanelItem PPI;
+        Info.Control(PANEL_ACTIVE, FCTL_GETSELECTEDPANELITEM,i,(LONG_PTR)&PPI);
+        if (!((TmpPanel *)hPlugin)->PutOneFile(PPI))
+        {
+          Info.Control(PANEL_ACTIVE, FCTL_FREEPANELITEM,i,(LONG_PTR)&PPI);
+#endif
+          ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, false);
+           return(INVALID_HANDLE_VALUE);
+        }
+#ifdef UNICODE
+        Info.Control(PANEL_ACTIVE, FCTL_FREEPANELITEM,i,(LONG_PTR)&PPI);
+#endif
+      }
+      ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, true);
+    }
   }
   return(hPlugin);
 }
@@ -395,14 +439,32 @@
   TCHAR **argv;
 #ifndef UNICODE
   static const int ANSI = FALSE;
-#else
-  wchar_t tmpstr[128][COMMONPANELSNUMBER];
 #endif
   ReadFileList (Name, &argc, &argv WITH_ANSI_ARG);
 
+#ifdef UNICODE
+  wchar_t **TMPArray=(wchar_t**)malloc(argc*sizeof(wchar_t*));
+  if (TMPArray)
+  {
+    int ret;
+    for (int i=0;i<argc;i++)
+      if (ret=!(TMPArray[i]=(wchar_t*)malloc(68*sizeof(wchar_t)))) break;
+
+    if (ret)
+    {
+    	for (int i=0;i<argc;i++)
+    		if (TMPArray[i]) free(TMPArray[i]);
+    	free(TMPArray);
+      if (argv) free(argv);
+      return;
+    }
+  }
+#endif
+
   FarMenuItem *fmi=(FarMenuItem*)malloc(argc*sizeof(FarMenuItem));
-  if(fmi)
+  if (fmi)
   {
+    memset(fmi,0,argc*sizeof(FarMenuItem));
     TCHAR TMP[MAX_PATH];
     for(int i=0;i<argc;++i)
     {
@@ -411,13 +473,11 @@
       param=ParseParam(p);
       FSF.TruncStr(param?param:p,67);
 #ifndef UNICODE
-#define _OUT  fmi[i].Text
+      lstrcpy(fmi[i].Text,(param?param:p));
 #else
-#define _OUT  tmpstr[i]
-      fmi[i].Text = _OUT;
+      lstrcpy(TMPArray[i],(param?param:p));
+      fmi[i].Text = TMPArray[i];
 #endif
-      lstrcpy(_OUT,param?param:p);
-#undef _OUT
       fmi[i].Separator=!lstrcmp(param,_T("-"));
     }
 //    fmi[0].Selected=TRUE;
@@ -435,6 +495,11 @@
     int ExitCode=Info.Menu(Info.ModuleNumber, -1, -1, 0,
       FMENU_WRAPMODE, Title, NULL, _T("Contents"),
       &BreakKeys[0], &BreakCode, fmi, argc);
+#ifdef UNICODE
+   	for (int i=0;i<argc;i++)
+   		if (TMPArray[i]) free(TMPArray[i]);
+   	free(TMPArray);
+#endif
     free(fmi);
     if((unsigned)ExitCode<(unsigned)argc)
     {
@@ -498,6 +563,11 @@
     return(INVALID_HANDLE_VALUE);
 #undef PNAME_ARG
 
+  //save PanelMode
+  GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
+
   if(!Opt.MenuForFilelist)
   {
     HANDLE hPlugin=new TmpPanel();
@@ -548,7 +618,7 @@
   Info->DiskMenuNumbers=DiskMenuNumbers;
   Info->DiskMenuStringsNumber=Opt.AddToDisksMenu?ArraySize(DiskMenuStrings):0;
   static const TCHAR *PluginMenuStrings[1];
-  PluginMenuStrings[0]=GetMsg(MTempPanel);
+  PluginMenuStrings[0]=Opt.Branch?GetMsg(MPluginMenuStringBranch):GetMsg(MTempPanel);
   Info->PluginMenuStrings=Opt.AddToPluginsMenu?PluginMenuStrings:NULL;
   Info->PluginMenuStringsNumber=Opt.AddToPluginsMenu?ArraySize(PluginMenuStrings):0;
   static const TCHAR *PluginCfgStrings[1];
@@ -610,8 +680,8 @@
 int WINAPI EXP_NAME(GetMinFarVersion)(void)
 {
 #ifndef UNICODE
-  return(MAKEFARVERSION(1,70,1024));
+  return(MAKEFARVERSION(1,70,2087));
 #else
-  return(MAKEFARVERSION(1,80,557));
+  return(MAKEFARVERSION(2,0,753));
 #endif
 }
Index: TmpRus.hlf
===================================================================
--- TmpRus.hlf	(revision 2545)
+++ TmpRus.hlf	(working copy)
@@ -72,6 +72,10 @@
  #�������� � ���� ��������#
    ����蠥� ���������� � ���� ���譨� ���㫥� �㭪� "�६����� ������".
 
+ #� ०��� "���� ��⠫���"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #�ᯮ�짮���� ����� ������#
    �� ���� ࠧ�蠥� �ᯮ�짮����� ��饩 �६����� ������,
 ᮤ�ন��� ���ன ��࠭���� �� �� �����⨨.
@@ -114,6 +118,9 @@
    �� ����⨨ #Enter# �� ����� ������, �� ��饬�� ॠ���
 ������ 䠩��, ��� ����� �㤥� ᪮��஢�� � ��������� ��ப� FAR.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #����஢��� ᮤ�ন��� �����# :
    �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
 ������ �� ����� � ��⠫����� ����஢����� ᮤ�ঠ騥�� � ��� 䠩��.
@@ -160,6 +167,12 @@
 �६����� ������. ����� ��ࠧ��, ����� ��࠭��� १����� ��᪮�쪨�
 ����権 ���᪠ � ࠡ���� � ���� �����६����.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #���� �������#    #���� ������� ��ப� �����#,
  #��ਭ� �������#  #��ਭ� ������� ��ப� �����#
  #[ ] ������࠭�� ०��# : ~+full~@CMD@
Index: TmpEng.hlf
===================================================================
--- TmpEng.hlf	(revision 2545)
+++ TmpEng.hlf	(working copy)
@@ -72,6 +72,10 @@
  #Add to plugins menu#
    Enables adding the "Temporary" item to the plugins menu.
 
+ #In mode "Branch"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #Use common panel#
    When enabled, a common temporary panel is created and its contents is
 stored even after closing the panel. When this option is not enabled,
@@ -112,6 +116,9 @@
    When #Enter# is pressed on an element that is not a real file name,
 its text will be copied to the FAR command line.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #Copy folders contents#
    When copying folders to the temporary panel, controls whether
 files are also copied to the panel. If set to the undefined state
@@ -156,6 +163,12 @@
 This allows to save the results of multiple search operations and work
 with them at the same time.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #Column types#    #Status line column types#
  #Column widths#   #Status line column widths#
  #[ ] Full screen mode# : ~+full~@CMD@
Index: TmpPanel.hpp
===================================================================
--- TmpPanel.hpp	(revision 2545)
+++ TmpPanel.hpp	(working copy)
@@ -42,7 +42,7 @@
 
 extern int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 extern TCHAR PluginRootKey[80];
-
+extern TCHAR StartupCurDir[MAX_PATH];
 const TCHAR *GetMsg(int MsgId);
 void InitDialogItems(const MyInitDialogItem *Init,struct FarDialogItem *Item,int ItemsNumber);
 
Index: TmpCfg.hpp
===================================================================
--- TmpCfg.hpp	(revision 2545)
+++ TmpCfg.hpp	(working copy)
@@ -5,6 +5,7 @@
 {
   int AddToDisksMenu;
   int AddToPluginsMenu;
+  int Branch;
   int CommonPanel;
   int SafeModePanel;
   int AnyInPanel;
@@ -12,7 +13,10 @@
   int Mode;
   int MenuForFilelist;
   int NewPanelForSearchResults;
+  int ShowDir;
+  int SelectedShowDir;
   int FullScreenPanel;
+  int PanelMode;
   int LastSearchResultsPanel;
   int SelectedCopyContents;
   TCHAR ColumnTypes[64];
Index: TmpClass.cpp
===================================================================
--- TmpClass.cpp	(revision 2545)
+++ TmpClass.cpp	(working copy)
@@ -32,7 +32,7 @@
   IfOptCommonPanel();
 #ifndef UNICODE
   struct PanelInfo PInfo;
-  Info.Control(this,FCTL_GETPANELINFO,&PInfo);
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
   UpdateItems(IsOwnersDisplayed (PInfo.ColumnTypes),IsLinksDisplayed (PInfo.ColumnTypes));
 #else
   int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
@@ -82,7 +82,8 @@
 
   Info->PanelModesArray=PanelModesArray;
   Info->PanelModesNumber=ArraySize(PanelModesArray);
-  Info->StartPanelMode=_T('4');
+  // save PanelMode
+  Info->StartPanelMode=(Opt.FullScreenPanel!=StartupOptFullScreenPanel?_T('4'):Opt.PanelMode);
   static struct KeyBarTitles KeyBar;
   memset(&KeyBar,0,sizeof(KeyBar));
   KeyBar.Titles[7-1]=(TCHAR*)GetMsg(MF7);
@@ -96,18 +97,16 @@
 
 int TmpPanel::SetDirectory(const TCHAR *Dir,int OpMode)
 {
-  if((OpMode & OPM_FIND)/* || lstrcmp(Dir,_T("\\"))==0*/)
+  if(OpMode & OPM_FIND)
     return(FALSE);
   if(lstrcmp(Dir,_T("\\"))==0)
 #ifndef UNICODE
     Info.Control(this,FCTL_CLOSEPLUGIN,(void*)NULL);
+  else
+    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
 #else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,NULL);
-#endif
   else
-#ifndef UNICODE
-    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
-#else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,(LONG_PTR)Dir);
 #endif
   return(TRUE);
@@ -135,6 +134,7 @@
 {
   IfOptCommonPanel();
   Opt.SelectedCopyContents = Opt.CopyContents;
+  Opt.SelectedShowDir=Opt.ShowDir;
 
   HANDLE hScreen=Info.SaveScreen(0,0,-1,-1);
   const TCHAR *MsgItems[]={GetMsg(MTempPanel),GetMsg(MTempSendFiles)};
@@ -188,6 +188,14 @@
     lstrcat(wp, PanelItem.FindData.lpwszFileName);
     CurPanelItem->FindData.lpwszFileName = wp;
 #endif
+     // add [ ] ShowDir
+    if (Opt.SelectedShowDir==2 && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+    {
+      const TCHAR *MsgItems[]={GetMsg(MWarning),GetMsg(MShowDirMsg)};
+      Opt.SelectedShowDir=!Info.Message(Info.ModuleNumber,FMSG_MB_YESNO,_T("Config"),MsgItems,
+          sizeof(MsgItems)/sizeof(MsgItems[0]),0);
+    }
+
     if(Opt.SelectedCopyContents && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
     {
       if (Opt.SelectedCopyContents==2)
@@ -340,9 +348,17 @@
 {
   struct PluginPanelItem *CurItem=TmpPanelItem;
   for(int i=0;i<TmpItemsNumber-1;i++,CurItem++)
-    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0)
+  {
+    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0
+       // add [ ] ShowDir
+       || ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            && lstrcmp(CurItem->FindData.cFileName, _T("..")) )  )
       CurItem->Flags|=REMOVE_FLAG;
-    RemoveEmptyItems();
+  }
+  if ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+        && lstrcmp(CurItem->FindData.cFileName, _T("..")) )
+    CurItem->Flags|=REMOVE_FLAG;
+  RemoveEmptyItems();
 }
 
 
@@ -488,14 +504,18 @@
 
 int TmpPanel::ProcessEvent(int Event,void *)
 {
+  struct PanelInfo PInfo;
+#ifndef UNICODE
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
+#else
+  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
+#endif
+
   if(Event==FE_CHANGEVIEWMODE)
   {
-    IfOptCommonPanel();
 #ifndef UNICODE
-    struct PanelInfo PInfo;
-    Info.Control(this,FCTL_GETPANELINFO,&PInfo);
-		int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
-		int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
+    int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
+    int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
 #else
     int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
     wchar_t* ColumnTypes=new wchar_t[Size];
@@ -518,21 +538,32 @@
 #endif
     }
   }
+  // save PanelMode
+  else if (Event==FE_CLOSE)
+  {
+    PInfo.ViewMode += 0x30;
+    HKEY hKey; DWORD Disposition;
+    if (Opt.FullScreenPanel==StartupOptFullScreenPanel && RegCreateKeyEx(HKEY_CURRENT_USER,
+          PluginRootKey,0,NULL,0,KEY_WRITE,NULL, &hKey,&Disposition)==ERROR_SUCCESS)
+    {
+      RegSetValueEx(hKey,_T("PanelMode"),0,REG_DWORD,(LPBYTE)&PInfo.ViewMode,sizeof(int));
+      RegCloseKey(hKey);
+    }
+  }
   return(FALSE);
 }
 
 
 int TmpPanel::IsCurrentFileCorrect (TCHAR *pCurFileName)
 {
-  struct PanelInfo PInfo;
   TCHAR CurFileName[NM];
 #ifndef UNICODE
+  struct PanelInfo PInfo;
   Info.Control(this,FCTL_GETPANELINFO,&PInfo);
   lstrcpy(CurFileName, PInfo.PanelItems[PInfo.CurrentItem].FindData.cFileName);
 #else
-  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
   PluginPanelItem PPI;
-  Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,(LONG_PTR)&PPI);
+  Info.Control(this,FCTL_GETCURRENTPANELITEM,0,(LONG_PTR)&PPI);
   lstrcpy(CurFileName,PPI.FindData.lpwszFileName);
   Info.Control(this,FCTL_FREEPANELITEM,0,(LONG_PTR)&PPI);
 #endif
@@ -581,16 +612,13 @@
 
         if (PInfo.PanelItems[PInfo.CurrentItem].FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
         {
+          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
 #else
         PluginPanelItem PPI;
         Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,(LONG_PTR)&PPI);
         if(PPI.FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
         {
           Info.Control(this,FCTL_FREEPANELITEM,0,(LONG_PTR)&PPI);
-#endif
-#ifndef UNICODE
-          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
-#else
           Info.Control(PANEL_PASSIVE, FCTL_SETPANELDIR,0,(LONG_PTR)&CurFileName);
 #endif
         }
@@ -612,10 +640,11 @@
       return(TRUE);
   }
 
-  if(ControlState==0 && Key==VK_RETURN && Opt.AnyInPanel)
+  if(ControlState==0 && Key==VK_RETURN)
   {
     TCHAR CurFileName [NM];
-    if (!IsCurrentFileCorrect (CurFileName))
+    BOOL Ret;
+    if (!(Ret=IsCurrentFileCorrect(CurFileName)) && Opt.AnyInPanel)
     {
 #ifndef UNICODE
       Info.Control(this,FCTL_SETCMDLINE,&CurFileName);
@@ -624,6 +653,12 @@
 #endif
       return(TRUE);
     }
+    // �� ���� � ������ �� <..> ������� ������ �����
+    if (Ret && !lstrcmp(CurFileName,_T("..")))
+    {
+      SetDirectory(StartupCurDir,0);
+      return(TRUE);
+    }
   }
 
   if (Opt.SafeModePanel && ControlState == PKF_CONTROL && Key == VK_PRIOR)
Index: TmpEng.lng
===================================================================
--- TmpEng.lng	(revision 2545)
+++ TmpEng.lng	(working copy)
@@ -9,6 +9,7 @@
 " %sTemporary panel [%d] "
 
 "temporary"
+"Temporary panel - branch"
 
 "Remove"
 "Switch"
@@ -23,8 +24,9 @@
 
 "Temporary panel"
 "Add to &Disks menu"
-"Disks menu &hotkey ('1'-'9'). Leave empty to autoassign"
+"Disks menu &hotkey ('1'-'9')"
 "Add to &Plugins menu"
+"In mode "&Branch""
 
 "Use &common panel"
 "&Safe panel mode"
@@ -33,6 +35,7 @@
 "&Replace files with file list"
 "&Menu from file list"
 "Copy folder c&ontents"
+"Show fold&ers in panel"
 
 "F&ull screen mode"
 
@@ -49,3 +52,4 @@
 "Save file list as"
 
 "Copy folder contents?"
+"Show folders in panel?"
\ No newline at end of file
Index: TmpRus.lng
===================================================================
--- TmpRus.lng	(revision 2545)
+++ TmpRus.lng	(working copy)
@@ -9,6 +9,7 @@
 " %s�६����� ������ [%d] "
 
 "�६�����"
+"�६����� ������ - ���� ��⠫���"
 
 "�����"
 "�롮�"
@@ -23,8 +24,9 @@
 
 "�६����� ������"
 "�������� � ���� &��᪮�"
-"&������ ����㯠 ('1'-'9'). �᫨ �� �������, �����砥��� ᠬ�"
+"&������ ����㯠 ('1'-'9')"
 "�������� � ���� &��������"
+"� ०��� "&���� ��⠫���""
 
 "�ᯮ�짮���� &����� ������"
 "&�������� ०�� ������"
@@ -33,6 +35,7 @@
 ""&������" ��� 䠩��-ᯨ᪠"
 "&���� �� 䠩��-ᯨ᪠"
 "����஢��� �&���ন��� �����"
+"�⮡�&���� ����� �� ������"
 
 "�����&�࠭�� ०��"
 
@@ -49,3 +52,4 @@
 "���࠭��� ᯨ᮪ ���"
 
 "����஢��� ᮤ�ন��� �����?"
+"�⮡ࠦ��� ����� �� ������?"
Index: TmpClass.hpp
===================================================================
--- TmpClass.hpp	(revision 2545)
+++ TmpClass.hpp	(working copy)
@@ -23,7 +23,6 @@
     void ProcessSaveListKey();
     void ProcessPanelSwitchMenu();
     void SwitchToPanel (int NewPanelIndex);
-    void FindSearchResultsPanel();
     void SaveListFile (const TCHAR *Path);
     int IsCurrentFileCorrect (TCHAR *pCurFileName);
 
@@ -45,7 +44,7 @@
     HANDLE BeginPutFiles();
     void CommitPutFiles (HANDLE hRestoreScreen, int Success);
     int PutOneFile (PluginPanelItem &PanelItem);
-
+    void FindSearchResultsPanel();
     int SetFindList(const struct PluginPanelItem *PanelItem,int ItemsNumber);
     int ProcessEvent(int Event,void *Param);
     int ProcessKey(int Key,unsigned int ControlState);
!work4.diff (27,330 bytes)   

samlyukov

2009-02-21 10:48

reporter   bugnote:0002557

Last edited: 2009-02-21 14:18

комплексный патч № 4 (интересно, это кому-нибудь помогает... :-)
- в уникоде в меню из .temp файла попадал мусор.
- меню вообще было криво портировано.

из-за изменений внесенных DrKnS в последнии версии уникодного фара плагины (да и сам фар) теперь не переходит в пути вида С: - так что это не глюк плагина.

PS последнее исправлено DrKnS в 779 фаре.

samlyukov

2009-02-28 05:58

reporter   bugnote:0002623

адаптация к FAR 2.0.789

2009-02-28 05:58

 

!work5.diff (28,120 bytes)   
Index: TmpPanel.rc
===================================================================
--- TmpPanel.rc	(revision 2646)
+++ TmpPanel.rc	(working copy)
@@ -1,6 +1,6 @@
 #include "farversion.hpp"
 
-#define PLUGIN_BUILD 47
+#define PLUGIN_BUILD 48
 #define PLUGIN_DESC "Temp Panel for FAR Manager"
 #define PLUGIN_NAME "TmpPanel"
 #define PLUGIN_FILENAME "TmpPanel.dll"
Index: TmpLng.hpp
===================================================================
--- TmpLng.hpp	(revision 2646)
+++ TmpLng.hpp	(working copy)
@@ -12,6 +12,7 @@
   MTempPanelTitleNum,
 
   MDiskMenuString,
+  MPluginMenuStringBranch,
 
   MF7,
   MAltShiftF12,
@@ -28,6 +29,7 @@
   MConfigAddToDisksMenu,
   MConfigDisksMenuDigit,
   MConfigAddToPluginsMenu,
+  MConfigPluginsMenuBranch,
 
   MConfigCommonPanel,
   MSafeModePanel,
@@ -36,6 +38,7 @@
   MReplaceInFilelist,
   MMenuForFilelist,
   MCopyContens,
+  MShowDir,
 
   MFullScreenPanel,
 
@@ -51,7 +54,8 @@
   MNewPanelForSearchResults,
   MListFilePath,
 
-  MCopyContensMsg
+  MCopyContensMsg,
+  MShowDirMsg
 };
 
 #endif /* __TMPLNG_HPP__ */
Index: TmpPanel.cpp
===================================================================
--- TmpPanel.cpp	(revision 2646)
+++ TmpPanel.cpp	(working copy)
@@ -13,7 +13,7 @@
 struct PluginStartupInfo Info;
 struct FarStandardFunctions FSF;
 BOOL IsOldFAR;
-
+TCHAR StartupCurDir[MAX_PATH];
 PluginPanels CommonPanels[COMMONPANELSNUMBER];
 
 #if defined(__GNUC__)
@@ -85,6 +85,8 @@
   HANDLE hPlugin=INVALID_HANDLE_VALUE;
 
   GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
 
   StartupOpenFrom=OpenFrom;
   if(OpenFrom==OPEN_COMMANDLINE)
@@ -166,6 +168,52 @@
   {
     hPlugin=new TmpPanel();
     if(hPlugin==NULL) return(INVALID_HANDLE_VALUE);
+
+    // ������� [x] in mode Branch
+    if (Opt.AddToPluginsMenu && Opt.Branch && OpenFrom==OPEN_PLUGINSMENU)
+    {
+      PanelInfo PInfo;
+#ifndef UNICODE
+      if (!Info.Control(INVALID_HANDLE_VALUE, FCTL_GETPANELINFO, &PInfo))
+#else
+      if (!Info.Control(PANEL_ACTIVE,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo))
+#endif
+        return(INVALID_HANDLE_VALUE);
+
+      ((TmpPanel *)hPlugin)->FindSearchResultsPanel();
+      if (Opt.Mode)
+      {
+        FreePanelItems(CommonPanels[CurrentCommonPanel].Items,
+                       CommonPanels[CurrentCommonPanel].ItemsNumber);
+        CommonPanels[CurrentCommonPanel].Items=(PluginPanelItem*)malloc(sizeof(PluginPanelItem));
+        CommonPanels[CurrentCommonPanel].ItemsNumber=0;
+      }
+      HANDLE hScreen = ((TmpPanel *)hPlugin)->BeginPutFiles();
+      for (int i=0; i<PInfo.SelectedItemsNumber; i++)
+      {
+#ifndef UNICODE
+        if (!((TmpPanel *)hPlugin)->PutOneFile(PInfo.SelectedItems[i]))
+        {
+          ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, false);
+           return(INVALID_HANDLE_VALUE);
+        }
+#else
+        PluginPanelItem* PPI=(PluginPanelItem*)malloc(Info.Control(PANEL_ACTIVE,FCTL_GETSELECTEDPANELITEM,i,0));
+        if (PPI)
+        {
+          Info.Control(PANEL_ACTIVE,FCTL_GETSELECTEDPANELITEM,i,(LONG_PTR)PPI);
+          if (!((TmpPanel *)hPlugin)->PutOneFile(*PPI))
+          {
+            free(PPI);
+            ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, false);
+            return(INVALID_HANDLE_VALUE);
+          }
+          free(PPI);
+        }
+#endif
+      }
+      ((TmpPanel *)hPlugin)->CommitPutFiles(hScreen, true);
+    }
   }
   return(hPlugin);
 }
@@ -395,14 +443,32 @@
   TCHAR **argv;
 #ifndef UNICODE
   static const int ANSI = FALSE;
-#else
-  wchar_t tmpstr[128][COMMONPANELSNUMBER];
 #endif
   ReadFileList (Name, &argc, &argv WITH_ANSI_ARG);
 
+#ifdef UNICODE
+  wchar_t **TMPArray=(wchar_t**)malloc(argc*sizeof(wchar_t*));
+  if (TMPArray)
+  {
+    int ret;
+    for (int i=0;i<argc;i++)
+      if (ret=!(TMPArray[i]=(wchar_t*)malloc(68*sizeof(wchar_t)))) break;
+
+    if (ret)
+    {
+    	for (int i=0;i<argc;i++)
+    		if (TMPArray[i]) free(TMPArray[i]);
+    	free(TMPArray);
+      if (argv) free(argv);
+      return;
+    }
+  }
+#endif
+
   FarMenuItem *fmi=(FarMenuItem*)malloc(argc*sizeof(FarMenuItem));
-  if(fmi)
+  if (fmi)
   {
+    memset(fmi,0,argc*sizeof(FarMenuItem));
     TCHAR TMP[MAX_PATH];
     for(int i=0;i<argc;++i)
     {
@@ -411,13 +477,11 @@
       param=ParseParam(p);
       FSF.TruncStr(param?param:p,67);
 #ifndef UNICODE
-#define _OUT  fmi[i].Text
+      lstrcpy(fmi[i].Text,(param?param:p));
 #else
-#define _OUT  tmpstr[i]
-      fmi[i].Text = _OUT;
+      lstrcpy(TMPArray[i],(param?param:p));
+      fmi[i].Text = TMPArray[i];
 #endif
-      lstrcpy(_OUT,param?param:p);
-#undef _OUT
       fmi[i].Separator=!lstrcmp(param,_T("-"));
     }
 //    fmi[0].Selected=TRUE;
@@ -435,13 +499,18 @@
     int ExitCode=Info.Menu(Info.ModuleNumber, -1, -1, 0,
       FMENU_WRAPMODE, Title, NULL, _T("Contents"),
       &BreakKeys[0], &BreakCode, fmi, argc);
+#ifdef UNICODE
+   	for (int i=0;i<argc;i++)
+   		if (TMPArray[i]) free(TMPArray[i]);
+   	free(TMPArray);
+#endif
     free(fmi);
     if((unsigned)ExitCode<(unsigned)argc)
     {
       ExpandEnvStrs(argv[ExitCode],TMP,ArraySize(TMP));
       TCHAR *p=TMP;
       ParseParam(p);
-
+      //MessageBox(0,p,L"p",MB_OK);
       FAR_FIND_DATA FindData;
       int bShellExecute=BreakCode!=-1;
 
@@ -449,6 +518,7 @@
       {
         if(TmpPanel::CheckForCorrect(p,&FindData,FALSE))
         {
+          //MessageBox(0,p,L"p2",MB_OK);
           if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
 #ifndef UNICODE
             Info.Control(INVALID_HANDLE_VALUE,FCTL_SETPANELDIR,p);
@@ -498,6 +568,11 @@
     return(INVALID_HANDLE_VALUE);
 #undef PNAME_ARG
 
+  //save PanelMode
+  GetOptions();
+  // �� �������� � ����� ����� �� <..>
+  GetCurrentDirectory(sizeof(StartupCurDir),StartupCurDir);
+
   if(!Opt.MenuForFilelist)
   {
     HANDLE hPlugin=new TmpPanel();
@@ -548,7 +623,7 @@
   Info->DiskMenuNumbers=DiskMenuNumbers;
   Info->DiskMenuStringsNumber=Opt.AddToDisksMenu?ArraySize(DiskMenuStrings):0;
   static const TCHAR *PluginMenuStrings[1];
-  PluginMenuStrings[0]=GetMsg(MTempPanel);
+  PluginMenuStrings[0]=Opt.Branch?GetMsg(MPluginMenuStringBranch):GetMsg(MTempPanel);
   Info->PluginMenuStrings=Opt.AddToPluginsMenu?PluginMenuStrings:NULL;
   Info->PluginMenuStringsNumber=Opt.AddToPluginsMenu?ArraySize(PluginMenuStrings):0;
   static const TCHAR *PluginCfgStrings[1];
@@ -610,8 +685,8 @@
 int WINAPI EXP_NAME(GetMinFarVersion)(void)
 {
 #ifndef UNICODE
-  return(MAKEFARVERSION(1,70,1024));
+  return(MAKEFARVERSION(1,70,2087));
 #else
-  return(MAKEFARVERSION(1,80,557));
+  return(MAKEFARVERSION(2,0,789));
 #endif
 }
Index: TmpCfg.cpp
===================================================================
--- TmpCfg.cpp	(revision 2646)
+++ TmpCfg.cpp	(working copy)
@@ -19,6 +19,7 @@
 {
   AddToDisksMenu,
   AddToPluginsMenu,
+  Branch,
   CommonPanel,
   SafeModePanel,
   AnyInPanel,
@@ -26,6 +27,7 @@
   Mode,
   MenuForFilelist,
   NewPanelForSearchResults,
+  ShowDir,
   FullScreenPanel,
   ColumnTypes,
   ColumnWidths,
@@ -38,11 +40,11 @@
 
 options_t Opt;
 
-static const TCHAR REGStr[17][8]=
+static const TCHAR REGStr[19][8]=
 {
- _T("InDisks"), _T("InPlug"),
+ _T("InDisks"), _T("InPlug"), _T("Branch"),
  _T("Common"),  _T("Safe"),   _T("Any"),    _T("Contens"),
- _T("Mode"),    _T("Menu"),   _T("NewP"),
+ _T("Mode"),    _T("Menu"),   _T("NewP"),   _T("Dir"),
  _T("Full"),
  _T("ColT"),    _T("ColW"),   _T("StatT"),  _T("StatW"),
  _T("DigitV"),  _T("Mask"),   _T("Prefix")
@@ -58,37 +60,40 @@
 static const struct COptionsList OptionsList[]={
   {&Opt.AddToDisksMenu    , _T("")          ,  1},
   {&Opt.AddToPluginsMenu  , _T("")          ,  4},
+  {&Opt.Branch            , _T("")          ,  5},
 
-  {&Opt.CommonPanel       , _T("")          ,  6},
-  {&Opt.SafeModePanel     , NULL            ,  7},
-  {&Opt.AnyInPanel        , NULL            ,  8},
-  {&Opt.CopyContents      , NULL            ,  9},
-  {&Opt.Mode              , _T("")          , 10},
-  {&Opt.MenuForFilelist   , NULL            , 11},
-  {&Opt.NewPanelForSearchResults, NULL      , 12},
+  {&Opt.CommonPanel       , _T("")          ,  7},
+  {&Opt.SafeModePanel     , NULL            ,  8},
+  {&Opt.AnyInPanel        , NULL            ,  9},
+  {&Opt.CopyContents      , NULL            , 10},
+  {&Opt.Mode              , _T("")          , 11},
+  {&Opt.MenuForFilelist   , NULL            , 12},
+  {&Opt.NewPanelForSearchResults, NULL      , 13},
+  {&Opt.ShowDir           , _T("")          , 14},
 
-  {&Opt.FullScreenPanel   , NULL            , 22},
+  {&Opt.FullScreenPanel   , NULL            , 24},
 
-  {Opt.ColumnTypes        , _T("N,S")       , 15},
-  {Opt.ColumnWidths       , _T("0,8")       , 17},
-  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 19},
-  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 21},
+  {Opt.ColumnTypes        , _T("N,S")       , 17},
+  {Opt.ColumnWidths       , _T("0,8")       , 19},
+  {Opt.StatusColumnTypes  , _T("NR,SC,D,T") , 21},
+  {Opt.StatusColumnWidths , _T("0,8,0,5")   , 23},
 
   {Opt.DisksMenuDigit     , _T("1")         ,  2},
-  {Opt.Mask               , _T("*.temp")    , 25},
-  {Opt.Prefix             , _T("tmp")       , 27},
+  {Opt.Mask               , _T("*.temp")    , 27},
+  {Opt.Prefix             , _T("tmp")       , 29},
 };
 
 int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 
 void GetOptions(void)
 {
+  DWORD Type,Size,IntValueData;
+  TCHAR StrValueData[256];
+  HKEY hKey;
+  RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
+
   for(int i=AddToDisksMenu;i<=Prefix;i++)
   {
-    DWORD Type,Size,IntValueData;
-    TCHAR StrValueData[256];
-    HKEY hKey;
-    RegOpenKeyEx(HKEY_CURRENT_USER,PluginRootKey,0,KEY_QUERY_VALUE,&hKey);
     if (i<ColumnTypes)
     {
       Size=sizeof(IntValueData);
@@ -105,8 +110,14 @@
         RegQueryValueEx(hKey,REGStr[i],0,&Type,(BYTE*)StrValueData,&Size)==ERROR_SUCCESS?
         (TCHAR*)StrValueData:OptionsList[i].pStr);
     }
-    RegCloseKey(hKey);
   }
+  //save PanelMode
+  Size=sizeof(IntValueData); Type=REG_DWORD;
+  Opt.PanelMode=0x34;
+  if (RegQueryValueEx(hKey, _T("PanelMode"),0,&Type,(BYTE *)&IntValueData,&Size)==ERROR_SUCCESS)
+    Opt.PanelMode=(IntValueData>=0x30 && IntValueData<=0x39?IntValueData:0x34);
+
+  RegCloseKey(hKey);
 }
 
 const int DIALOG_WIDTH = 78;
@@ -122,46 +133,48 @@
   /* 2*/ {DI_FIXEDIT,   7, 3,  7, 3, 0, -1},
   /* 3*/ {DI_TEXT,      9, 3,  0, 0, 0, MConfigDisksMenuDigit},
   /* 4*/ {DI_CHECKBOX, DC, 2,  0, 0, 0, MConfigAddToPluginsMenu},
-  /* 5*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /* 5*/ {DI_CHECKBOX,DC+3,3,  0, 0, 0, MConfigPluginsMenuBranch},
+  /* 6*/ {DI_TEXT,      5, 4,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /* 6*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
-  /* 7*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
-  /* 8*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
-  /* 9*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
-  /*10*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
-  /*11*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
-  /*12*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /* 7*/ {DI_CHECKBOX,  5, 5,  0, 0, 0, MConfigCommonPanel},
+  /* 8*/ {DI_CHECKBOX,  5, 6,  0, 0, 0, MSafeModePanel},
+  /* 9*/ {DI_CHECKBOX,  5, 7,  0, 0, 0, MAnyInPanel},
+  /*10*/ {DI_CHECKBOX,  5, 8,  0, 0, DIF_3STATE, MCopyContens},
+  /*11*/ {DI_CHECKBOX, DC, 5,  0, 0, 0, MReplaceInFilelist},
+  /*12*/ {DI_CHECKBOX, DC, 6,  0, 0, 0, MMenuForFilelist},
+  /*13*/ {DI_CHECKBOX, DC, 7,  0, 0, 0, MNewPanelForSearchResults},
+  /*14*/ {DI_CHECKBOX, DC, 8,  0, 0, DIF_3STATE, MShowDir},
 
-  /*13*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*15*/ {DI_TEXT,      5, 9,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*14*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
-  /*15*/ {DI_EDIT,      5,11, 36,11, 0, -1},
-  /*16*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
-  /*17*/ {DI_EDIT,      5,13, 36,13, 0, -1},
-  /*18*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
-  /*19*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
-  /*20*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
-  /*21*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
-  /*22*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
+  /*16*/ {DI_TEXT,      5,10,  0, 0, 0, MColumnTypes},
+  /*17*/ {DI_EDIT,      5,11, 36,11, 0, -1},
+  /*18*/ {DI_TEXT,      5,12,  0, 0, 0, MColumnWidths},
+  /*19*/ {DI_EDIT,      5,13, 36,13, 0, -1},
+  /*20*/ {DI_TEXT,     DC,10,  0, 0, 0, MStatusColumnTypes},
+  /*21*/ {DI_EDIT,     DC,11, 72,11, 0, -1},
+  /*22*/ {DI_TEXT,     DC,12,  0, 0, 0, MStatusColumnWidths},
+  /*23*/ {DI_EDIT,     DC,13, 72,13, 0, -1},
+  /*24*/ {DI_CHECKBOX,  5,14,  0, 0, 0, MFullScreenPanel},
 
-  /*23*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*25*/ {DI_TEXT,      5,15,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*24*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
-  /*25*/ {DI_EDIT,      5,17, 36,17, 0, -1},
-  /*26*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
-  /*27*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
+  /*26*/ {DI_TEXT,      5,16,  0, 0, 0, MMask},
+  /*27*/ {DI_EDIT,      5,17, 36,17, 0, -1},
+  /*28*/ {DI_TEXT,     DC,16,  0, 0, 0, MPrefix},
+  /*29*/ {DI_EDIT,     DC,17, 72,17, 0, -1},
 
-  /*28*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
+  /*30*/ {DI_TEXT,      5,18,  0, 0, DIF_BOXCOLOR|DIF_SEPARATOR, -1},
 
-  /*29*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
-  /*30*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
+  /*31*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MOk},
+  /*32*/ {DI_BUTTON,    0,19,  0, 0, DIF_CENTERGROUP,  MCancel}
   };
 
   int i;
   struct FarDialogItem DialogItems[ArraySize(InitItems)];
 
   InitDialogItems(InitItems,DialogItems,ArraySize(InitItems));
-  DialogItems[29].DefaultButton=1;
+  DialogItems[31].DefaultButton=1;
   DialogItems[2].Focus=1;
 
   GetOptions();
Index: TmpRus.hlf
===================================================================
--- TmpRus.hlf	(revision 2646)
+++ TmpRus.hlf	(working copy)
@@ -72,6 +72,10 @@
  #�������� � ���� ��������#
    ����蠥� ���������� � ���� ���譨� ���㫥� �㭪� "�६����� ������".
 
+ #� ०��� "���� ��⠫���"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #�ᯮ�짮���� ����� ������#
    �� ���� ࠧ�蠥� �ᯮ�짮����� ��饩 �६����� ������,
 ᮤ�ন��� ���ன ��࠭���� �� �� �����⨨.
@@ -114,6 +118,9 @@
    �� ����⨨ #Enter# �� ����� ������, �� ��饬�� ॠ���
 ������ 䠩��, ��� ����� �㤥� ᪮��஢�� � ��������� ��ப� FAR.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #����஢��� ᮤ�ন��� �����# :
    �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
 ������ �� ����� � ��⠫����� ����஢����� ᮤ�ঠ騥�� � ��� 䠩��.
@@ -160,6 +167,12 @@
 �६����� ������. ����� ��ࠧ��, ����� ��࠭��� १����� ��᪮�쪨�
 ����権 ���᪠ � ࠡ���� � ���� �����६����.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #���� �������#    #���� ������� ��ப� �����#,
  #��ਭ� �������#  #��ਭ� ������� ��ப� �����#
  #[ ] ������࠭�� ०��# : ~+full~@CMD@
Index: TmpEng.hlf
===================================================================
--- TmpEng.hlf	(revision 2646)
+++ TmpEng.hlf	(working copy)
@@ -72,6 +72,10 @@
  #Add to plugins menu#
    Enables adding the "Temporary" item to the plugins menu.
 
+ #In mode "Branch"#
+    �������� �ᯮ�짮���� "�६����� ������" � ���� ���譨� ���㫥� ���
+����஥��� �� �뤥������ ����⮢ ���᪮�� ��ॢ� ����� � 䠩���.
+
  #Use common panel#
    When enabled, a common temporary panel is created and its contents is
 stored even after closing the panel. When this option is not enabled,
@@ -112,6 +116,9 @@
    When #Enter# is pressed on an element that is not a real file name,
 its text will be copied to the FAR command line.
 
+   �᫨ ������ #F8# �� ॠ�쭮� ��ꥪ�, ��� ��ꥪ� �㤥� 䨧��᪨
+㤠��� � ���⥫�, �� �� ������ ������� �� ��-�०���� ��⠭���� �����.
+
  #Copy folders contents#
    When copying folders to the temporary panel, controls whether
 files are also copied to the panel. If set to the undefined state
@@ -156,6 +163,12 @@
 This allows to save the results of multiple search operations and work
 with them at the same time.
 
+ #�⮡ࠦ��� ����� �� ������#
+   �� ����஢���� ��⠫���� �� �६����� ������, ��।����,
+������ �� ᠬ� ��⠫��� �⮡ࠦ����� �� ������.
+�᫨ �� ���� ��室���� � ����।������� ���ﭨ� (#[?]#), ��
+������ ����஢���� ��⠫���� �������� �����, �㦭� �� �� �����뢠��.
+
  #Column types#    #Status line column types#
  #Column widths#   #Status line column widths#
  #[ ] Full screen mode# : ~+full~@CMD@
Index: TmpPanel.hpp
===================================================================
--- TmpPanel.hpp	(revision 2646)
+++ TmpPanel.hpp	(working copy)
@@ -42,7 +42,7 @@
 
 extern int StartupOptFullScreenPanel,StartupOptCommonPanel,StartupOpenFrom;
 extern TCHAR PluginRootKey[80];
-
+extern TCHAR StartupCurDir[MAX_PATH];
 const TCHAR *GetMsg(int MsgId);
 void InitDialogItems(const MyInitDialogItem *Init,struct FarDialogItem *Item,int ItemsNumber);
 
Index: TmpCfg.hpp
===================================================================
--- TmpCfg.hpp	(revision 2646)
+++ TmpCfg.hpp	(working copy)
@@ -5,6 +5,7 @@
 {
   int AddToDisksMenu;
   int AddToPluginsMenu;
+  int Branch;
   int CommonPanel;
   int SafeModePanel;
   int AnyInPanel;
@@ -12,7 +13,10 @@
   int Mode;
   int MenuForFilelist;
   int NewPanelForSearchResults;
+  int ShowDir;
+  int SelectedShowDir;
   int FullScreenPanel;
+  int PanelMode;
   int LastSearchResultsPanel;
   int SelectedCopyContents;
   TCHAR ColumnTypes[64];
Index: TmpClass.cpp
===================================================================
--- TmpClass.cpp	(revision 2646)
+++ TmpClass.cpp	(working copy)
@@ -32,7 +32,7 @@
   IfOptCommonPanel();
 #ifndef UNICODE
   struct PanelInfo PInfo;
-  Info.Control(this,FCTL_GETPANELINFO,&PInfo);
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
   UpdateItems(IsOwnersDisplayed (PInfo.ColumnTypes),IsLinksDisplayed (PInfo.ColumnTypes));
 #else
   int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
@@ -82,7 +82,8 @@
 
   Info->PanelModesArray=PanelModesArray;
   Info->PanelModesNumber=ArraySize(PanelModesArray);
-  Info->StartPanelMode=_T('4');
+  // save PanelMode
+  Info->StartPanelMode=(Opt.FullScreenPanel!=StartupOptFullScreenPanel?_T('4'):Opt.PanelMode);
   static struct KeyBarTitles KeyBar;
   memset(&KeyBar,0,sizeof(KeyBar));
   KeyBar.Titles[7-1]=(TCHAR*)GetMsg(MF7);
@@ -96,18 +97,16 @@
 
 int TmpPanel::SetDirectory(const TCHAR *Dir,int OpMode)
 {
-  if((OpMode & OPM_FIND)/* || lstrcmp(Dir,_T("\\"))==0*/)
+  if(OpMode & OPM_FIND)
     return(FALSE);
   if(lstrcmp(Dir,_T("\\"))==0)
 #ifndef UNICODE
     Info.Control(this,FCTL_CLOSEPLUGIN,(void*)NULL);
+  else
+    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
 #else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,NULL);
-#endif
   else
-#ifndef UNICODE
-    Info.Control(this,FCTL_CLOSEPLUGIN,(void*)Dir);
-#else
     Info.Control(this,FCTL_CLOSEPLUGIN,0,(LONG_PTR)Dir);
 #endif
   return(TRUE);
@@ -135,6 +134,7 @@
 {
   IfOptCommonPanel();
   Opt.SelectedCopyContents = Opt.CopyContents;
+  Opt.SelectedShowDir=Opt.ShowDir;
 
   HANDLE hScreen=Info.SaveScreen(0,0,-1,-1);
   const TCHAR *MsgItems[]={GetMsg(MTempPanel),GetMsg(MTempSendFiles)};
@@ -188,6 +188,14 @@
     lstrcat(wp, PanelItem.FindData.lpwszFileName);
     CurPanelItem->FindData.lpwszFileName = wp;
 #endif
+     // add [ ] ShowDir
+    if (Opt.SelectedShowDir==2 && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+    {
+      const TCHAR *MsgItems[]={GetMsg(MWarning),GetMsg(MShowDirMsg)};
+      Opt.SelectedShowDir=!Info.Message(Info.ModuleNumber,FMSG_MB_YESNO,_T("Config"),MsgItems,
+          sizeof(MsgItems)/sizeof(MsgItems[0]),0);
+    }
+
     if(Opt.SelectedCopyContents && NameOnly && (CurPanelItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
     {
       if (Opt.SelectedCopyContents==2)
@@ -340,9 +348,17 @@
 {
   struct PluginPanelItem *CurItem=TmpPanelItem;
   for(int i=0;i<TmpItemsNumber-1;i++,CurItem++)
-    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0)
+  {
+    if(lstrcmp(CurItem->FindData.cFileName,CurItem[1].FindData.cFileName)==0
+       // add [ ] ShowDir
+       || ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            && lstrcmp(CurItem->FindData.cFileName, _T("..")) )  )
       CurItem->Flags|=REMOVE_FLAG;
-    RemoveEmptyItems();
+  }
+  if ( !Opt.SelectedShowDir && (CurItem->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+        && lstrcmp(CurItem->FindData.cFileName, _T("..")) )
+    CurItem->Flags|=REMOVE_FLAG;
+  RemoveEmptyItems();
 }
 
 
@@ -488,14 +504,18 @@
 
 int TmpPanel::ProcessEvent(int Event,void *)
 {
+  struct PanelInfo PInfo;
+#ifndef UNICODE
+  Info.Control(this,FCTL_GETPANELSHORTINFO,&PInfo);
+#else
+  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
+#endif
+
   if(Event==FE_CHANGEVIEWMODE)
   {
-    IfOptCommonPanel();
 #ifndef UNICODE
-    struct PanelInfo PInfo;
-    Info.Control(this,FCTL_GETPANELINFO,&PInfo);
-		int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
-		int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
+    int UpdateOwners=IsOwnersDisplayed (PInfo.ColumnTypes) && !LastOwnersRead;
+    int UpdateLinks=IsLinksDisplayed (PInfo.ColumnTypes) && !LastLinksRead;
 #else
     int Size=Info.Control(this,FCTL_GETCOLUMNTYPES,0,NULL);
     wchar_t* ColumnTypes=new wchar_t[Size];
@@ -518,23 +538,34 @@
 #endif
     }
   }
+  // save PanelMode
+  else if (Event==FE_CLOSE)
+  {
+    PInfo.ViewMode += 0x30;
+    HKEY hKey; DWORD Disposition;
+    if (Opt.FullScreenPanel==StartupOptFullScreenPanel && RegCreateKeyEx(HKEY_CURRENT_USER,
+          PluginRootKey,0,NULL,0,KEY_WRITE,NULL, &hKey,&Disposition)==ERROR_SUCCESS)
+    {
+      RegSetValueEx(hKey,_T("PanelMode"),0,REG_DWORD,(LPBYTE)&PInfo.ViewMode,sizeof(int));
+      RegCloseKey(hKey);
+    }
+  }
   return(FALSE);
 }
 
 
 int TmpPanel::IsCurrentFileCorrect (TCHAR *pCurFileName)
 {
-  struct PanelInfo PInfo;
   TCHAR CurFileName[NM];
 #ifndef UNICODE
+  struct PanelInfo PInfo;
   Info.Control(this,FCTL_GETPANELINFO,&PInfo);
   lstrcpy(CurFileName, PInfo.PanelItems[PInfo.CurrentItem].FindData.cFileName);
 #else
-  Info.Control(this,FCTL_GETPANELINFO,0,(LONG_PTR)&PInfo);
-  PluginPanelItem* PPI=(PluginPanelItem*)malloc(Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,0));
+  PluginPanelItem* PPI=(PluginPanelItem*)malloc(Info.Control(this,FCTL_GETCURRENTPANELITEM,0,0));
   if(PPI)
   {
-    Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,(LONG_PTR)PPI);
+    Info.Control(this,FCTL_GETCURRENTPANELITEM,0,(LONG_PTR)PPI);
     lstrcpy(CurFileName,PPI->FindData.lpwszFileName);
     free(PPI);
   }
@@ -584,6 +615,7 @@
 
         if (PInfo.PanelItems[PInfo.CurrentItem].FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
         {
+          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
 #else
         PluginPanelItem* PPI=(PluginPanelItem*)malloc(Info.Control(this,FCTL_GETPANELITEM,PInfo.CurrentItem,0));
         DWORD attributes=0;
@@ -595,10 +627,6 @@
         }
         if(attributes&FILE_ATTRIBUTE_DIRECTORY)
         {
-#endif
-#ifndef UNICODE
-          Info.Control(INVALID_HANDLE_VALUE, FCTL_SETANOTHERPANELDIR,&CurFileName);
-#else
           Info.Control(PANEL_PASSIVE, FCTL_SETPANELDIR,0,(LONG_PTR)&CurFileName);
 #endif
         }
@@ -620,10 +648,11 @@
       return(TRUE);
   }
 
-  if(ControlState==0 && Key==VK_RETURN && Opt.AnyInPanel)
+  if(ControlState==0 && Key==VK_RETURN)
   {
     TCHAR CurFileName [NM];
-    if (!IsCurrentFileCorrect (CurFileName))
+    BOOL Ret;
+    if (!(Ret=IsCurrentFileCorrect(CurFileName)) && Opt.AnyInPanel)
     {
 #ifndef UNICODE
       Info.Control(this,FCTL_SETCMDLINE,&CurFileName);
@@ -632,6 +661,12 @@
 #endif
       return(TRUE);
     }
+    // �� ���� � ������ �� <..> ������� ������ �����
+    if (Ret && !lstrcmp(CurFileName,_T("..")))
+    {
+      SetDirectory(StartupCurDir,0);
+      return(TRUE);
+    }
   }
 
   if (Opt.SafeModePanel && ControlState == PKF_CONTROL && Key == VK_PRIOR)
Index: TmpEng.lng
===================================================================
--- TmpEng.lng	(revision 2646)
+++ TmpEng.lng	(working copy)
@@ -9,6 +9,7 @@
 " %sTemporary panel [%d] "
 
 "temporary"
+"Temporary panel - branch"
 
 "Remove"
 "Switch"
@@ -23,8 +24,9 @@
 
 "Temporary panel"
 "Add to &Disks menu"
-"Disks menu &hotkey ('1'-'9'). Leave empty to autoassign"
+"Disks menu &hotkey ('1'-'9')"
 "Add to &Plugins menu"
+"In mode "&Branch""
 
 "Use &common panel"
 "&Safe panel mode"
@@ -33,6 +35,7 @@
 "&Replace files with file list"
 "&Menu from file list"
 "Copy folder c&ontents"
+"Show fold&ers in panel"
 
 "F&ull screen mode"
 
@@ -49,3 +52,4 @@
 "Save file list as"
 
 "Copy folder contents?"
+"Show folders in panel?"
\ No newline at end of file
Index: TmpRus.lng
===================================================================
--- TmpRus.lng	(revision 2646)
+++ TmpRus.lng	(working copy)
@@ -9,6 +9,7 @@
 " %s�६����� ������ [%d] "
 
 "�६�����"
+"�६����� ������ - ���� ��⠫���"
 
 "�����"
 "�롮�"
@@ -23,8 +24,9 @@
 
 "�६����� ������"
 "�������� � ���� &��᪮�"
-"&������ ����㯠 ('1'-'9'). �᫨ �� �������, �����砥��� ᠬ�"
+"&������ ����㯠 ('1'-'9')"
 "�������� � ���� &��������"
+"� ०��� "&���� ��⠫���""
 
 "�ᯮ�짮���� &����� ������"
 "&�������� ०�� ������"
@@ -33,6 +35,7 @@
 ""&������" ��� 䠩��-ᯨ᪠"
 "&���� �� 䠩��-ᯨ᪠"
 "����஢��� �&���ন��� �����"
+"�⮡�&���� ����� �� ������"
 
 "�����&�࠭�� ०��"
 
@@ -49,3 +52,4 @@
 "���࠭��� ᯨ᮪ ���"
 
 "����஢��� ᮤ�ন��� �����?"
+"�⮡ࠦ��� ����� �� ������?"
Index: TmpClass.hpp
===================================================================
--- TmpClass.hpp	(revision 2646)
+++ TmpClass.hpp	(working copy)
@@ -23,7 +23,6 @@
     void ProcessSaveListKey();
     void ProcessPanelSwitchMenu();
     void SwitchToPanel (int NewPanelIndex);
-    void FindSearchResultsPanel();
     void SaveListFile (const TCHAR *Path);
     int IsCurrentFileCorrect (TCHAR *pCurFileName);
 
@@ -45,7 +44,7 @@
     HANDLE BeginPutFiles();
     void CommitPutFiles (HANDLE hRestoreScreen, int Success);
     int PutOneFile (PluginPanelItem &PanelItem);
-
+    void FindSearchResultsPanel();
     int SetFindList(const struct PluginPanelItem *PanelItem,int ItemsNumber);
     int ProcessEvent(int Event,void *Param);
     int ProcessKey(int Key,unsigned int ControlState);
!work5.diff (28,120 bytes)   

vskirdin

2009-03-02 10:56

administrator   bugnote:0002646

> Если нажать #F8# на реальном объекте, этот объект будет физически удален с носителя, но на панели плагина он по-прежнему останется виден.

Разжуй - в чем прикол? Типа, "ты суслика видишь, а его нет"?

samlyukov

2009-03-02 13:49

reporter   bugnote:0002652

Last edited: 2009-03-02 13:50

Ага, это еще в фарбагз n-цать лет назад обсуждалось с Будько, я просто тогда у себя в хелпе поправил, а вы у себя нет :)

vskirdin

2009-03-02 14:03

administrator   bugnote:0002653

так напомни, че прикол этого суслика...

samlyukov

2009-03-02 14:11

reporter   bugnote:0002654

н-дя... тяжелый случай, ты ,наверно, панель вообще редко юзаешь :)
а тем более F1, прочитай про опцию "Любые элементы в панели".

vskirdin

2009-03-02 16:45

administrator   bugnote:0002655

Блин... я понимаю, что любые элементы.
НАХРЕНА оставлять убиенных в панели???
Смысл потаенный каков?
В чем фишка того, что после F8 файл на диске убился, а на панели остался?

samlyukov

2009-03-02 16:52

reporter   bugnote:0002657

откуда я знаю, я только в справку добавил описание.

vskirdin

2009-03-02 17:23

administrator   bugnote:0002658

ну так разузнай, прежде чем патч применять, иначе это какая-то фигня получается.
наверняка я не первый, кто спросит потом "какого хрена и куда делся файл"

samlyukov

2009-03-02 17:32

reporter   bugnote:0002659

теперь я что-то недопонимаю, функционал "после F8 файл на диске убился, а на панели остался" существует, как я понимаю, с момента рождения плагина. я эту хрень описал, чтоб не вводить в заблуждения узеров, а теперь я еще и виноват остался...

sytoedov

2009-03-11 09:24

reporter   bugnote:0002741

Для меня, как для рядового пользователя, это просто-напросто ошибка.
Если какая-то ошибка существует с момента рождения, да ещё и документирована - это не делает её не ошибкой, мне кажется.
Тем более, что это не такой уж полезный функционал (оставлять удалённый файл в списке), чтобы кто-то им реально пользовался.
Большее количество человек это скорее введёт в заблуждение (вне зависимости от того, описано это в хелпе или нет).

vskirdin

2009-07-08 12:20

administrator   bugnote:0003684

предлагается эту "мнимую фичу" про F8 удалить как класс.

JohnDoe

2017-11-11 15:43

updater   bugnote:0015822

Чего ждёт тикет?

Issue History

Date Modified Username Field Change
2009-01-24 17:09 samlyukov New Issue
2009-01-24 17:09 samlyukov File Added: !work.diff
2009-02-01 09:11 samlyukov Note Added: 0002374
2009-02-01 09:11 samlyukov File Added: !work2.diff
2009-02-03 15:46 samlyukov File Added: !work3.diff
2009-02-03 15:49 samlyukov Note Added: 0002382
2009-02-21 10:41 samlyukov File Added: !work4.diff
2009-02-21 10:48 samlyukov Note Added: 0002557
2009-02-21 14:18 samlyukov Note Edited: 0002557
2009-02-28 05:58 samlyukov Note Added: 0002623
2009-02-28 05:58 samlyukov File Added: !work5.diff
2009-03-02 10:56 vskirdin Note Added: 0002646
2009-03-02 13:49 samlyukov Note Added: 0002652
2009-03-02 13:50 samlyukov Note Edited: 0002652
2009-03-02 14:03 vskirdin Note Added: 0002653
2009-03-02 14:11 samlyukov Note Added: 0002654
2009-03-02 16:45 vskirdin Note Added: 0002655
2009-03-02 16:52 samlyukov Note Added: 0002657
2009-03-02 17:23 vskirdin Note Added: 0002658
2009-03-02 17:32 samlyukov Note Added: 0002659
2009-03-11 09:24 sytoedov Note Added: 0002741
2009-06-22 13:27 samlyukov Status new => resolved
2009-06-22 13:27 samlyukov Resolution open => no change required
2009-06-22 13:27 samlyukov Assigned To => samlyukov
2009-06-22 13:29 alexy Assigned To samlyukov =>
2009-07-08 12:20 vskirdin Note Added: 0003684
2009-10-23 11:50 alexy Status resolved => feedback
2017-11-11 15:43 JohnDoe Note Added: 0015822