Что нового

Добавление подкаталогов в дерево каталогов

Callisto

Новичок
Сообщения
4
Репутация
0
Версия AutoIt: 3.3.8.1

Описание: Имеется дополнение для Notepad++, которое при выборе определенного пункта, отправляет содержимое соответствующего файла .тхт в открытое окно Notepad++.
Так вот, необходимо добавить подкаталоги в существующие каталоги.
Если с добавлением новых каталогов и пунктов к ним, еще как-то разобралась, то с подкаталогами - знаний и логики не хватило (толко несколько дней, как узнала об AutoIt).
Код:
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=RainSend.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=Must be executed from the 'Run' menu item in NotePad++
#AutoIt3Wrapper_Res_Description=Sends Meter / Measure / Plugin templates to NotePad++
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=(C)2011 - Jeffrey Morley - Creative Commons Attribution-Non-Commercial-Share Alike 3.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <StaticConstants.au3>
#include <Array.au3>
#include <file.au3>
#Include <Misc.au3>

Opt("SendKeyDelay", 1)
Opt("GUICloseOnESC", 0)
_Singleton("RainSend")


If $CMDLine[0] = 0 Or $CMDLine[1] <> "NP++" Then
	MsgBox(16,"RainSend","RainSend должены быть выполнен из вкладки Запуск в меню Notepad++")
	Exit
EndIf

$lines = 0
Dim $FilesArray

$MainForm = GUICreate("RainSend", 220, 500, @DesktopWidth - 235, -1)
$MainTree = GUICtrlCreateTreeView(10, 10, 200, 447, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$Skins = GUICtrlCreateTreeViewItem("Skins", $MainTree)
$Measures = GUICtrlCreateTreeViewItem("Measures", $MainTree)
$Meters = GUICtrlCreateTreeViewItem("Meters", $MainTree)
$Plugins = GUICtrlCreateTreeViewItem("Plugins", $MainTree)
$Other = GUICtrlCreateTreeViewItem("Other", $MainTree)
$Mouse = GUICtrlCreateTreeViewItem("Mouse", $MainTree)

_FileReadToArray(@ScriptDir & '\RainSend.Files', $FilesArray)
if IsArray($FilesArray) = false Then
	Exit
EndIf

For $i = 1 to $FilesArray[0]
	$Full = StringSplit($FilesArray[$i], ",")
	$Right = $Full[2]
	If StringUpper(StringLeft($Right, 5)) = "SKINS" Then
		GUICtrlCreateTreeViewItem($Full[1], $Skins)
	ElseIf StringUpper(StringLeft($Right, 7)) = "MEASURE" Then
		GUICtrlCreateTreeViewItem($Full[1], $Measures)
	ElseIf StringUpper(StringLeft($Right, 5)) = "METER" Then
		GUICtrlCreateTreeViewItem($Full[1], $Meters)
	ElseIf StringUpper(StringLeft($Right, 6)) = "PLUGIN" Then
		GUICtrlCreateTreeViewItem($Full[1], $Plugins)
	ElseIf StringUpper(StringLeft($Right, 5)) = "OTHER" Then
		GUICtrlCreateTreeViewItem($Full[1], $Other)
	ElseIf StringUpper(StringLeft($Right, 5)) = "MOUSE" Then
		GUICtrlCreateTreeViewItem($Full[1], $Mouse)
	Else
	EndIf
Next

$SendButton = GUICtrlCreateButton("Send", 54, 467, 75, 23)
$CloseButton = GUICtrlCreateButton("Close", 135, 467, 75, 23)
GUISetState(@SW_SHOWNORMAL, $MainForm)

While 1

	$nMsg = GUIGetMsg()

	Switch $nMsg

		Case $GUI_EVENT_CLOSE
			Exit
		Case $CloseButton
			Exit

		Case $SendButton

			if ProcessExists("Notepad++.exe") Then

				$item = GUICtrlRead($MainTree)
				$text = GUICtrlRead($item, 1)
				if $Text <> "Skins" And $Text <> "Meters" And $Text <> "Measures" And $Text <> "Plugins" And $Text <> "Other" And $Text <> "Mouse" Then

					$index = _ArraySearch($FilesArray, $text,0,0,0,1)
					$FileName = StringSplit($FilesArray[$index], ",")
					$infile = FileOpen(@ScriptDir & '\' & $FileName[2], 0)
					WinActivate("[CLASS:Notepad++]", "")

					While 1
						$line = FileReadLine($infile)
						If @error = -1 Then ExitLoop
						$lines = $lines + 1
						Send($line & '{ESC}{ENTER}')
					WEnd

					For $i = 1 to $lines
						Send('{UP}')
					Next
					FileClose($infile)

				EndIf

			Else

				MsgBox(16,"RainSend","NotePad++ MUST be running to use RainSend")

			EndIf

	EndSwitch

WEnd

Примечания: Вот тут можно ознакомиться с этим дополнением полностью RainSend 1.0 (надеюсь это не будет считаться рекламой или еще чем-то запрещенным :smile: )
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Callisto
Почитал описание и понял, что скрипт отправляет текст прочитанный в файле в окно Notepad++. При этом список файлов создаётся с помощью _FileReadToArray, а это не поддерживает вложенные каталоги. При чём каталоги используемые в скрипте зарезервированы самим скриптом и праспределение происходит по левой части имени файла. Создать что-то иное кроме указанного не получится текущим скриптом.

Проще было указать какой вам нужен инструмен, для этого есть более совершенные вещи:
1. CLCL - клавишей Alt+C вызываете меню для выбора из избранного. Как его наполнять? В трее кликнуть, откроется окно обычного менеджера, где создаются каталоги и напоняются контентом, вложенность присутсвует.
2. Panel Function - отличается от вами предложенного варианта тем что нет файлов, а есть база текстов всё в одном файле, но при этом можно легко вставлять / извлекать тексты и выбирать базу в меню. Причём работает это не только с Notepad++, можно указать привязку к другому окну.
 
Автор
Callisto

Callisto

Новичок
Сообщения
4
Репутация
0
AZJIO, Спасибо за ответ. Теперь хоть понятно, что с этим сделать ничего не получиться.
А инструмент нужен примерно такой;
Вывод информации в текстовый редактор, примерно с такой структурой каталога
Код:
+Каталог_1
	+Подкаталог_1
		Пункт
		Пункт
		...
	+Подкаталог_2
		Пункт
		Пункт
		...
	Пункт_1
	Пункт_2
	...
+Каталог_2
	+Подкаталог_1
		Пункт
		Пункт
		...
	+Подкаталог_2
		Пункт
		Пункт
		...
	Пункт_1
	Пункт_2
	...
+Каталог_3
...

Как-то неочень :smile:

А вот это впечатлило, даже в некоторых моментах поинтереснее RainSend будет, но опять же не предусмотренны подкаталоги.

Но вот возник вопрос по Panel Function, возможно ли сдвинуть некоторые пункты меню? Тогда можно было бы имитировать подкаталоги.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Callisto
Callisto сказал(а):
Но вот возник вопрос по Panel Function, возможно ли сдвинуть некоторые пункты меню? Тогда можно было бы имитировать подкаталоги.
Попробовал ввести 5 пробелов в имя добавляемого образца, имитация сдвига получилась. А вообще там как бы создать новую базу к примеру несколько файлов и через меню выбирать нужный файл, они автоматически прописываются в меню. Я отказался от дерева потому что ширина панели сразу увеличится пропорционально глубине вложений.
 
Автор
Callisto

Callisto

Новичок
Сообщения
4
Репутация
0
А я про пробелы и забыла, пыталась Tab'ом, какая-то зацикленность у меня на нем в последнее время.
А вообще там как бы создать новую базу к примеру несколько файлов и через меню выбирать нужный файл
Можно то можно, только не удобно и не логично получится. Слишком мало пунктов в подкаталоге, да и они информативно связаны с пунктами в каталоге.

Кстати, про ширину, заметила такой баг, что при каждом следующим открытии, окно немного увеличивается, как по ширине, так и по высоте? Это нормально или только у меня так?
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Callisto
Это нормально или только у меня так?
Это не нормально, видимо у вас Win7, я только недавно заметил эту проблему на разных системах, причём в других своих скриптах.
Можно то можно, только не удобно и не логично получится. Слишком мало пунктов в подкаталоге, да и они информативно связаны с пунктами в каталоге.
Вообще всё правильно, нужно переделывать на дерево, так как я могу ведь в корень добавлять пункты. Поэтому кто хочет в корень добавляет, а кто хочет в дерево.
 
Автор
Callisto

Callisto

Новичок
Сообщения
4
Репутация
0
Это не нормально, видимо у вас Win7
Это не нормально, видимо у вас Win7Она самая :smile:
И может стоит все-таки на "Ты", а то как-то непривычно такое обращение.

Вообще всё правильно, нужно переделывать на дерево
Т.е. имеются планы в будущем исправить баги и выпустить новую версию?
Если так, то обязательно сообщи мне :smile:

P.S. Как пометить тему решенной? В принципе, необходимый мне функционал получила, но если будут еще какие-либо интересные предложения, не откажусь :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Callisto [?]
Как пометить тему решенной?
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх