//--------------------------------------------------------------------------- void __fastcall TLocationProfilesDialog::RemoveBookmark(TObject * Sender) { TBookmarkList * BookmarkList = GetBookmarkList(Sender); TTreeView * ProfilesView = GetProfilesView(Sender); TStringList * Folders = GetFolders(Sender); assert(ProfilesView->Selected); TTreeNode * Node = ProfilesView->Selected; if (Node->Data) { BookmarkList->Delete((TBookmark *)Node->Data); TTreeNode * ParentNode = Node->Parent; Node->Delete(); if (ParentNode && !ParentNode->Count) { assert(Folders->IndexOfObject(ParentNode) >= 0); Folders->Delete(Folders->IndexOfObject(ParentNode)); ParentNode->Delete(); } } else { UnicodeString Message = MainInstructions(LoadStr(DELETE_BOOKMARK_FOLDER)); if (MessageDialog(Message, qtConfirmation, qaYes | qaNo, HELP_LOCATION_PROFILE_DELETE) == qaYes) { assert(Node->Count); for (int i = 0; i < Node->Count; i++) { BookmarkList->Delete((TBookmark *)Node->Item[i]->Data); } assert(Folders->IndexOfObject(Node) >= 0); Folders->Delete(Folders->IndexOfObject(Node)); Node->Delete(); } } UpdateControls(); }
//--------------------------------------------------------------------------- void __fastcall TLocationProfilesDialog::BookmarkMove(TObject * Sender, TTreeNode * Source, TTreeNode * Dest) { TBookmarkList * BookmarkList = GetBookmarkList(Sender); TTreeView * ProfilesView = GetProfilesView(Sender); TStringList * Folders = GetFolders(Sender); assert(Source && Source->Data); TBookmark * Bookmark = (TBookmark *)Source->Data; TTreeNode * PrevFolderNode = Source->Parent; if (!Dest || !Dest->Data) { Bookmark->Node = Dest ? Dest->Text : UnicodeString(); BookmarkList->MoveTo(BookmarkList->Bookmarks[BookmarkList->Count - 1], Bookmark, false); ProfilesView->Selected->MoveTo(Dest, naAddChild); } else { TBookmark * DestBookmark = (TBookmark *)Dest->Data; Bookmark->Node = DestBookmark->Node; BookmarkList->MoveTo(DestBookmark, Bookmark, Source->AbsoluteIndex > Dest->AbsoluteIndex); if (Source->AbsoluteIndex > Dest->AbsoluteIndex) { Source->MoveTo(Dest, naInsert); } else if (Dest->getNextSibling() != NULL) { Source->MoveTo(Dest->getNextSibling(), naInsert); } else { Source->MoveTo(Dest, naAdd); } } if (PrevFolderNode && !PrevFolderNode->Count) { assert(Folders->IndexOfObject(PrevFolderNode) >= 0); Folders->Delete(Folders->IndexOfObject(PrevFolderNode)); PrevFolderNode->Delete(); } Source->MakeVisible(); UpdateControls(); }