0,0 → 1,518 |
unit categories; |
|
interface |
|
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, |
Dialogs, StdCtrls, ComCtrls, ImgList, Menus, ShellAPI, global; |
|
type |
TMDICategories = class(TForm) |
ImageList1: TImageList; |
MainMenu1: TMainMenu; |
Kategorie1: TMenuItem; |
KategorieDelete1: TMenuItem; |
EditorOpen: TMenuItem; |
N2: TMenuItem; |
KategorieRefresh1: TMenuItem; |
KategorieClose1: TMenuItem; |
PopupMenu1: TPopupMenu; |
PEditor: TMenuItem; |
PDelete: TMenuItem; |
PExternal: TMenuItem; |
N4: TMenuItem; |
ExternalOpen: TMenuItem; |
N5: TMenuItem; |
PUmbenennen: TMenuItem; |
KategorieUmbenennen1: TMenuItem; |
TreeView1: TTreeView; |
PNeu: TMenuItem; |
N1: TMenuItem; |
procedure FormClose(Sender: TObject; var Action: TCloseAction); |
procedure FormShow(Sender: TObject); |
procedure TreeView1DblClick(Sender: TObject); |
procedure TreeView1KeyDown(Sender: TObject; var Key: Word; |
Shift: TShiftState); |
procedure KategorieDelete1Click(Sender: TObject); |
procedure EditorOpenClick(Sender: TObject); |
procedure KategorieClose1Click(Sender: TObject); |
procedure KategorieRefresh1Click(Sender: TObject); |
procedure ExternalOpenClick(Sender: TObject); |
procedure PopupMenu1Popup(Sender: TObject); |
procedure KategorieUmbenennen1Click(Sender: TObject); |
procedure TreeView1Change(Sender: TObject; Node: TTreeNode); |
procedure PNeuClick(Sender: TObject); |
procedure TreeView1KeyPress(Sender: TObject; var Key: Char); |
private |
procedure recursiveItemListing(folder: string; parentnode: TTreeNode); |
public |
procedure DeleteNode(folder, cat: string); |
procedure InsertNode(folder, cat: string; em: TAMode); |
procedure RefreshList; |
procedure DoNew; |
end; |
|
var |
MDICategories: TMDICategories; |
|
implementation |
|
{$R *.dfm} |
|
uses |
main; |
|
procedure TMDICategories.FormClose(Sender: TObject; var Action: TCloseAction); |
begin |
Action := caFree; |
end; |
|
procedure TMDICategories.FormShow(Sender: TObject); |
begin |
RefreshList; |
TreeView1.SetFocus; |
end; |
|
procedure TMDICategories.TreeView1Change(Sender: TObject; Node: TTreeNode); |
begin |
// if Change = ctState then |
// begin |
PNeu.Visible := true; |
N1.Visible := true; |
PEditor.Visible := true; |
PExternal.Visible := true; |
N2.Visible := true; |
PDelete.Visible := true; |
|
PNeu.Default := false; |
PEditor.Default := true; |
|
//PNeu.Enabled := (TreeView1.SelectionCount = 1) and |
// ((IsFolderNode(TreeView1.Selected)) or |
// (IsRootNode(TreeView1.Selected))); |
PNeu.Enabled := true; |
|
EditorOpen.Enabled := (TreeView1.SelectionCount = 1) and |
((IsAppenderNode(TreeView1.Selected)) or |
(IsForeignNode(TreeView1.Selected)) or |
(IsTextNode(TreeView1.Selected))); |
ExternalOpen.Enabled := (TreeView1.SelectionCount = 1) and |
((IsAppenderNode(TreeView1.Selected)) or |
(IsRootNode(TreeView1.Selected)) or |
(IsFolderNode(TreeView1.Selected)) or |
(IsForeignNode(TreeView1.Selected)) or |
(IsTextNode(TreeView1.Selected))); |
KategorieDelete1.Enabled := (TreeView1.SelectionCount = 1) and |
((IsAppenderNode(TreeView1.Selected)) or |
(IsFolderNode(TreeView1.Selected)) or |
(IsForeignNode(TreeView1.Selected)) or |
(IsTextNode(TreeView1.Selected))); |
KategorieUmbenennen1.Enabled := (TreeView1.SelectionCount = 1) and |
((IsAppenderNode(TreeView1.Selected)) or |
(IsFolderNode(TreeView1.Selected)) or |
(IsForeignNode(TreeView1.Selected)) or |
(IsTextNode(TreeView1.Selected))); |
|
PEditor.Enabled := EditorOpen.Enabled; |
PExternal.Enabled := ExternalOpen.Enabled; |
PDelete.Enabled := KategorieDelete1.Enabled; |
PUmbenennen.Enabled := KategorieUmbenennen1.Enabled; |
// end; |
end; |
|
procedure TMDICategories.TreeView1DblClick(Sender: TObject); |
begin |
if TreeView1.SelectionCount = 1 then |
begin |
EditorOpen.Click; |
end; |
end; |
|
procedure TMDICategories.TreeView1KeyDown(Sender: TObject; var Key: Word; |
Shift: TShiftState); |
begin |
if Key = VK_RETURN then |
begin |
Key := 0; |
if TreeView1.SelectionCount = 1 then |
begin |
if TreeView1.Selected.HasChildren then |
begin |
if TreeView1.Selected.Expanded then |
TreeView1.Selected.Collapse(false) |
else |
TreeView1.Selected.Expand(false); |
end |
else |
begin |
EditorOpen.Click; |
end; |
end; |
end; |
end; |
|
procedure TMDICategories.RefreshList; |
var |
root: TTreeNode; |
begin |
TreeView1.Visible := false; |
TreeView1.Items.Clear; |
TreeView1.Visible := true; |
|
root := TreeView1.Items.Add(nil, lng_root); |
root.ImageIndex := II_ROOT; |
root.SelectedIndex := II_ROOT; |
recursiveItemListing('', root); |
root.Expand(false); |
end; |
|
procedure TMDICategories.KategorieDelete1Click(Sender: TObject); |
var |
fn: string; |
begin |
if TreeView1.SelectionCount = 1 then |
begin |
fn := GetFileNameFromNode(TreeView1.Selected); |
if commonDelete(fn) then |
begin |
// TODO: Eigentlich sollte das innerhalb von commonDelete() stattfinden |
TreeView1.Selected.Delete; |
end; |
end; |
end; |
|
procedure TMDICategories.DeleteNode(folder, cat: string); |
|
procedure Rec(folder, cat: string; t: TTreeNode); |
var |
i: integer; |
begin |
if (folder = GetFolderFromNode(t)) and |
(cat = GetCatFromNode(t)) then |
begin |
t.Delete; |
exit; |
end; |
|
for i := t.Count - 1 downto 0 do |
begin |
Rec(folder, cat, t.Item[i]); |
end; |
end; |
|
begin |
Rec(folder, cat, treeview1.Items.Item[0]); |
end; |
|
procedure TMDICategories.InsertNode(folder, cat: string; em: TAMode); |
|
procedure Rec(folder, cat: string; em: TAMode; t: TTreeNode); |
var |
i: integer; |
n: TTreeNode; |
begin |
if (folder = GetFolderFromNode(t)) and |
(IsFolderNode(t) or IsRootNode(t)) then |
begin |
n := treeview1.Items.AddChild(t, cat); |
t.Expand(false); // Ordner aufklappen |
with n do |
begin |
if em = emFolder then |
begin |
ImageIndex := II_FOLDER; |
SelectedIndex := II_FOLDER; |
recursiveItemListing(folder + cat, n); |
end |
else |
begin |
if em = emText then |
begin |
ImageIndex := II_TEXT; |
SelectedIndex := II_TEXT; |
end |
else if em = emAppender then |
begin |
ImageIndex := II_APPENDER; |
SelectedIndex := II_APPENDER; |
end |
else if em = emForeign then |
begin |
ImageIndex := II_FOREIGN; |
SelectedIndex := II_FOREIGN; |
end; |
end; |
end; |
|
exit; |
end; |
|
for i := t.Count - 1 downto 0 do |
begin |
Rec(folder, cat, em, t.Item[i]); |
end; |
end; |
|
procedure NodeForceDir(folder: string); |
|
function CreateIfExists(foldername: string; node: TTreeNode): TTreeNode; |
var |
i: integer; |
somethingfound: boolean; |
begin |
result := nil; |
|
somethingfound := false; |
for i := 0 to node.Count - 1 do |
begin |
if (node.Item[i].Text = foldername) and |
(IsFolderNode(node.Item[i]) or IsRootNode(node.Item[i])) then |
begin |
somethingfound := true; |
result := node.Item[i]; |
break; |
end; |
end; |
|
if not somethingfound then |
begin |
result := treeview1.Items.AddChild(node, foldername); |
node.Expand(false); |
|
with result do |
begin |
ImageIndex := II_FOLDER; |
SelectedIndex := II_FOLDER; |
end; |
end; |
end; |
|
var |
x: tstringlist; |
i: Integer; |
node: TTreeNode; |
begin |
x := TStringList.Create; |
try |
Explode(PathDelim, folder, x); |
node := treeview1.Items.Item[0]; |
for i := 0 to x.count - 1 do |
begin |
if x.Strings[i] <> '' then |
begin |
node := CreateIfExists(x.Strings[i], node); |
end; |
end; |
finally |
x.Free; |
end; |
end; |
|
var |
sl: TStringList; |
i: integer; |
begin |
if (em = emFolder) and (cat = '') then |
begin |
sl := TStringList.Create; |
try |
explode(PathDelim, folder, sl); |
cat := sl.Strings[sl.Count-2]; |
folder := ''; |
for i := 0 to sl.Count - 3 do |
begin |
folder := folder + sl.Strings[i] + PathDelim; |
end; |
finally |
sl.Free; |
end; |
end; |
|
NodeForceDir(folder); |
Rec(folder, cat, em, treeview1.Items.Item[0]); |
end; |
|
procedure TMDICategories.DoNew; |
var |
folder: string; |
pnode: TTreeNode; |
begin |
if TreeView1.SelectionCount = 1 then |
begin |
if IsFolderNode(TreeView1.Selected) or |
IsRootNode(TreeView1.Selected) then |
begin |
pnode := TreeView1.Selected; |
end |
else |
begin |
pnode := TreeView1.Selected.Parent; |
end; |
folder := GetFolderFromNode(pnode); |
newDialog(folder); |
end |
else |
begin |
newDialog(''); // In der Wurzel erstellen |
TreeView1.Items.Item[0]; |
end; |
end; |
|
procedure TMDICategories.EditorOpenClick(Sender: TObject); |
var |
cat, folder: string; |
begin |
if TreeView1.SelectionCount = 1 then |
begin |
cat := TreeView1.Selected.Text; |
folder := GetFolderFromNode(TreeView1.Selected); |
|
if (IsForeignNode(TreeView1.Selected)) then |
begin |
ExternalOpen.Click; |
end |
else if (IsAppenderNode(TreeView1.Selected)) or |
(IsTextNode(TreeView1.Selected)) then |
begin |
if not FileExists(GetFileNameFromNode(TreeView1.Selected)) then |
begin |
ShowMessage(lng_filenotfound); |
Exit; |
end; |
|
if IsAppenderNode(TreeView1.Selected) then |
begin |
OpenAppenderEditor(folder, cat); |
end |
else |
begin |
OpenTextEditor(folder, cat); |
end; |
end; |
end; |
end; |
|
procedure TMDICategories.KategorieClose1Click(Sender: TObject); |
begin |
Close; |
end; |
|
procedure TMDICategories.KategorieRefresh1Click(Sender: TObject); |
begin |
RefreshList; |
|
TreeView1.SetFocus; |
end; |
|
procedure TMDICategories.KategorieUmbenennen1Click(Sender: TObject); |
begin |
renameDialog(TreeView1.Selected); |
end; |
|
procedure TMDICategories.PNeuClick(Sender: TObject); |
begin |
DoNew(); |
end; |
|
procedure TMDICategories.ExternalOpenClick(Sender: TObject); |
var |
fn: string; |
begin |
if TreeView1.SelectionCount = 1 then |
begin |
fn := GetFileNameFromNode(TreeView1.Selected); |
commonExternalOpen(fn); |
end; |
end; |
|
procedure TMDICategories.PopupMenu1Popup(Sender: TObject); |
begin |
if TreeView1.SelectionCount = 1 then |
begin |
PNeu.Visible := isFolderNode(TreeView1.Selected) or IsRootNode(TreeView1.Selected); |
N1.Visible := isFolderNode(TreeView1.Selected) or IsRootNode(TreeView1.Selected); |
PEditor.Visible := true; |
PExternal.Visible := true; |
N2.Visible := true; |
PDelete.Visible := true; |
PUmbenennen.Visible := true; |
|
PNeu.Default := false; |
PEditor.Default := true; |
end |
else |
begin |
PNeu.Visible := true; |
N1.Visible := false; |
PEditor.Visible := false; |
PExternal.Visible := false; |
N2.Visible := false; |
PDelete.Visible := false; |
PUmbenennen.Visible := false; |
|
PNeu.Default := true; |
PEditor.Default := false; |
end; |
end; |
|
procedure TMDICategories.recursiveItemListing(folder: string; |
parentnode: TTreeNode); |
var |
tmp_sr: TSearchRec; |
i_folder: TTreeNode; |
begin |
folder := MyAddTrailingPathDelimiter(folder); |
if FindFirst(allFiles(folder), faAnyFile, tmp_sr) = 0 then |
begin |
repeat |
if (tmp_sr.Name <> '.') and (tmp_sr.Name <> '..') then |
begin |
if directoryExists(getFolderName(folder, tmp_sr.Name)) then |
begin |
i_folder := TreeView1.Items.AddChild(parentnode, tmp_sr.Name); |
if CfgExpandNodesAtBeginning then parentnode.Expand(false); |
i_folder.ImageIndex := II_FOLDER; |
i_folder.SelectedIndex := II_FOLDER; |
recursiveItemListing(folder + tmp_sr.Name, i_folder); |
end |
else if (folder + tmp_sr.Name) = GetRelativeFileName(getAppenderFileName(folder, FilenameToCatname(tmp_sr.Name))) then |
begin |
with TreeView1.Items.AddChild(parentnode, FilenameToCatname(tmp_sr.Name)) do |
begin |
ImageIndex := II_APPENDER; |
SelectedIndex := II_APPENDER; |
end; |
if CfgExpandNodesAtBeginning then parentnode.Expand(false); |
end |
else if (folder + tmp_sr.Name) = GetRelativeFileName(getTextFileName(folder, FilenameToCatname(tmp_sr.Name))) then |
begin |
with TreeView1.Items.AddChild(parentnode, FilenameToCatname(tmp_sr.Name)) do |
begin |
ImageIndex := II_TEXT; |
SelectedIndex := II_TEXT; |
end; |
if CfgExpandNodesAtBeginning then parentnode.Expand(false); |
end |
else if getFolderName(folder, tmp_sr.Name) <> getJournalFileName() then |
begin |
with TreeView1.Items.AddChild(parentnode, tmp_sr.Name) do |
begin |
ImageIndex := II_FOREIGN; |
SelectedIndex := II_FOREIGN; |
end; |
if CfgExpandNodesAtBeginning then parentnode.Expand(false); |
end; |
end; |
until FindNext(tmp_sr) <> 0; |
FindClose(tmp_sr); |
end; |
end; |
|
procedure TMDICategories.TreeView1KeyPress(Sender: TObject; var Key: Char); |
begin |
// Verhindert einen Windows-Sound beim Drücken von Enter |
if key = #13 then key := #0; |
if key = #10 then key := #0; |
end; |
|
end. |