📄 umain.pas
字号:
begin
if AFocusedNode=ChannelNode then
ShowFolderContent(AFocusedNode);
BarCmbStyle.Enabled:=False;
Exit;
end;
try
if GetRootNode(AFocusedNode)=ChannelNode then
begin
feedItem:=TFeedItem(AFocusedNode.Data);
if feedItem.Outline.Type_<>'folder' then
begin
ReloadRssItems(AFocusedNode);
BarCmbStyle.Enabled:=True;
end
else
begin
ShowFolderContent(AFocusedNode);
BarCmbStyle.Enabled:=False;
end;
end
else if GetRootNode(AFocusedNode)=FavoritesNode then
begin
favItem:=TFavItem(AFocusedNode.Data);
if favItem.Outline.Type_<>'folder' then
begin
ReloadFavRssItems(AFocusedNode);
BarCmbStyle.Enabled:=True;
end
else
BarCmbStyle.Enabled:=False;
end;
finally // wrap up
end; // try/finally
end;
procedure TMainWindow.cxTreeList1SelectionChanged(Sender: TObject);
const
Xml_Start = '<?xml version="1.0" encoding="UTF-8"?><root><items>';
XML_End = '</items></root>';
var
HTML:string;
theItem:TcxTreeListNode;
i:Integer;
XMLString,itemXml:string;
begin
if cxTreeList1.FocusedNode=nil then
Exit;
TimerAutoReaded.Enabled:=False;
XMLString:=Xml_Start;
for i:= 0 to cxTreeList1.SelectionCount - 1 do // Iterate
begin
theItem:=cxTreeList1.Selections[i];
if (theItem.Selected) and (theItem<>nil) then
begin
itemXml:= TLocalRssItem(theItem.Data).XMLNode.xml;
XMLString:=XMLString + itemXml;
end;
end;
XMLString:=XMLString + XML_End;
HTMLXml.loadXML(XMLString);
HTML:= HTMLXml.transformNode(XSL.documentElement);
HTML:=FastReplace(HTML,'<META http-equiv="Content-Type" content="text/html; charset=utf-16">',
'');
HTML := FastReplace(HTML,'$ImagesFolder$',gProperties.AppPath+'Styles\Images\');
HTML := FastReplace(HTML,ToDayStr,'<b>Today</b>');
HTML := FastReplace(HTML,YestoDayStr,'<b>Yestoday</b>');
ShowHtmlInBrowser(HTML);
if (cxTreeList1.FocusedNode<>nil) and (AutoSetReaded) then
if not TLocalRssItem(cxTreeList1.FocusedNode.Data).Readed then
TimerAutoReaded.Enabled:=True;
AutoSetReaded := True;
end;
procedure TMainWindow.actSelectAllExecute(Sender: TObject);
begin
cxTreeList1.SelectAll;
end;
procedure TMainWindow.actSelectAllUpdate(Sender: TObject);
begin
actSelectAll.Enabled := cxTreeList1.Count > 0 ;
end;
procedure TMainWindow.actPreUnreadExecute(Sender: TObject);
begin
cxTreeList1.SetFocusedNode(PrevUnreadNode,[]);
end;
procedure TMainWindow.actNextUnreadExecute(Sender: TObject);
begin
cxTreeList1.SetFocusedNode(NextUnreadNode,[]);
end;
procedure TMainWindow.actNewFolderUpdate(Sender: TObject);
begin
if FeedTree.FocusedNode=nil then
(Sender as TAction).Enabled := False
else
begin
if FeedTree.FocusedNode.Level=0 then
(Sender as TAction).Enabled:=True
else
begin
if GetRootNode(FeedTree.FocusedNode)=ChannelNode then
(Sender as TAction).Enabled := (TFeedItem(FeedTree.FocusedNode.Data).Outline.Type_='folder')
else if GetRootNode(FeedTree.FocusedNode)=FavoritesNode then
(Sender as TAction).Enabled := (TFavItem(FeedTree.FocusedNode.Data).Outline.Type_='folder');
end;
end;
end;
function TMainWindow.NewFolder(DesNode:TcxTreeListNode;FolderName:string):TcxTreeListNode;
var
otl:TOutlineType;
feedItem,addFeed:TFeedItem;
favItem,addFav:TFavItem;
begin
Result:=nil;
if GetRootNode(DesNode)=ChannelNode then
begin
if DesNode.Level=0 then
otl:=Opml.Body.AddRootFolder
else
begin
feedItem := TFeedItem(DesNode.Data);
otl := feedItem.Outline.Items.Add('folder');
end;
otl.Title:=FolderName;
addFeed:=FeedList.Add(otl);
Result := FeedTree.AddChild(DesNode,addFeed);
Result.Texts[0]:=FolderName;
DesNode.Expand(False);
end
else if GetRootNode(DesNode)=FavoritesNode then
begin
if DesNode.Level=0 then
otl:=FavOpml.Body.AddRootFolder
else
begin
favItem := TFavItem(DesNode.Data);
otl := favItem.Outline.Items.Add('folder');
end;
otl.Title:=FolderName;
addFav:=FavList.Add(otl);
Result := FeedTree.AddChild(DesNode,addFav);
Result.Texts[0]:=FolderName;
DesNode.Expand(False);
end;
end;
procedure TMainWindow.RenameFolder(DesNode:TcxTreeListNode;FolderName:string);
var
feedItem:TFeedItem;
favItem:TFavItem;
begin
if GetRootNode(DesNode)=ChannelNode then
begin
feedItem := TFeedItem(DesNode.Data);
feedItem.Outline.Title := FolderName;
DesNode.Texts[0]:= FolderName;
end
else if GetRootNode(DesNode)=FavoritesNode then
begin
favItem := TfavItem(DesNode.Data);
favItem.Outline.Title := FolderName;
DesNode.Texts[0]:= FolderName;
end
end;
function TMainWindow.NewFavFolder(DesNode:TcxTreeListNode;FolderName:string):TcxTreeListNode;
var
otl:TOutlineType;
favItem,addFav:TFavItem;
begin
Result:=nil;
if GetRootNode(DesNode)=FavoritesNode then
begin
if DesNode.Level=0 then
otl:=FavOpml.Body.AddRootFolder
else
begin
favItem := TfavItem(DesNode.Data);
otl := favItem.Outline.Items.Add('folder');
end;
end
else
begin
Exit;
end;
otl.Title:=FolderName;
addFav:=FavList.Add(otl);
Result := FeedTree.AddChild(DesNode,addFav);
Result.Texts[0]:=FolderName;
DesNode.Expand(False);
end;
procedure TMainWindow.actNewFolderExecute(Sender: TObject);
var
Text:string;
begin
if fmNewFolder.Execute('New folder','Type the new folder name:','New Folder') then
begin
Text := fmNewFolder.FolderName;
NewFolder(FeedTree.FocusedNode,Text);
end;
end;
procedure TMainWindow.M4Click(Sender: TObject);
begin
MakeNewsPaper(FeedTree.FocusedNode);
end;
procedure TMainWindow.actMoveUpExecute(Sender: TObject);
begin
FeedTree.FocusedNode.MoveTo(FeedTree.FocusedNode.getPrevSibling,tlamInsert);
if GetRootNode(FeedTree.FocusedNode)=ChannelNode then
TFeedItem(FeedTree.FocusedNode.Data).Outline.MoveUp
else if GetRootNode(FeedTree.FocusedNode) = FavoritesNode then
TFavItem(FeedTree.FocusedNode.Data).Outline.MoveUp;
end;
procedure TMainWindow.actMoveDownExecute(Sender: TObject);
begin
FeedTree.FocusedNode.getNextSibling.MoveTo(FeedTree.FocusedNode,tlamInsert);
if GetRootNode(FeedTree.FocusedNode)=ChannelNode then
TFeedItem(FeedTree.FocusedNode.Data).Outline.MoveDown
else if GetRootNode(FeedTree.FocusedNode) = FavoritesNode then
TFavItem(FeedTree.FocusedNode.Data).Outline.MoveDown;
end;
procedure TMainWindow.actMoveUpUpdate(Sender: TObject);
begin
if FeedTree.FocusedNode=nil then
actMoveUp.Enabled := False
else
actMoveUp.Enabled := (FeedTree.FocusedNode.Level>0) and (FeedTree.FocusedNode.getPrevSibling<>nil);
end;
procedure TMainWindow.actMoveDownUpdate(Sender: TObject);
begin
if FeedTree.FocusedNode=nil then
actMoveDown.Enabled := False
else
actMoveDown.Enabled := (FeedTree.FocusedNode.Level>0) and (FeedTree.FocusedNode.getNextSibling<>nil);
end;
procedure TMainWindow.DeleteChildrenNode(ANode:TcxTreeListNode);
var
i:Integer;
feeditem:TFeedItem;
favitem:TFavItem;
begin
if aNode.HasChildren then
for i := aNode.Count - 1 downto 0 do // Iterate
begin
DeleteChildrenNode(aNode.Items[i]);
end;
if GetRootNode(aNode)=ChannelNode then
begin
feeditem := TFeedItem(aNode.Data);
FeedList.Delete(feeditem);
aNode.Delete;
end
else if GetRootNode(aNode)=FavoritesNode then
begin
favitem := TFavItem(aNode.Data);
FavList.Delete(favitem);
aNode.Delete;
end;
end;
procedure TMainWindow.actDeleteChannelExecute(Sender: TObject);
begin
if FeedTree.FocusedNode=nil then
Exit;
if not HTMLMessageDlg('Confirmation',
'Are you sure want delete it and his Children?',Btn_No) then
Exit;
DeleteChildrenNode(FeedTree.FocusedNode);
end;
procedure TMainWindow.actDeleteChannelUpdate(Sender: TObject);
begin
if FeedTree.FocusedNode=nil then
(Sender as TAction).Enabled := False
else
begin
(Sender as TAction).Enabled := (FeedTree.FocusedNode.Level>0) and
((GetRootNode(FeedTree.FocusedNode)=ChannelNode)or(GetRootNode(FeedTree.FocusedNode)=FavoritesNode));
end;
end;
procedure TMainWindow.actMoveToExecute(Sender: TObject);
var DesNode:TcxTreeListNode;
begin
if GetRootNode(FeedTree.FocusedNode)=ChannelNode then
begin
if ExecChooseFolder(ChannelNode,FeedTree.FocusedNode) then
begin
DesNode := FmChooseFolder.ResultNode;
if DesNode=FeedTree.FocusedNode.Parent then
Exit;
if DesNode.Level>0 then
TFeedItem(FeedTree.FocusedNode.Data).Outline.MoveTo(TFeedItem(DesNode.Data).Outline)
else
TFeedItem(FeedTree.FocusedNode.Data).Outline.MoveTo(nil);
FeedTree.FocusedNode.MoveTo(DesNode,tlamAddChild);
end;
end
else if GetRootNode(FeedTree.FocusedNode) = FavoritesNode then
begin
if ExecChooseFolder(FavoritesNode,FeedTree.FocusedNode) then
begin
DesNode := FmChooseFolder.ResultNode;
if DesNode=FeedTree.FocusedNode.Parent then
Exit;
if DesNode.Level>0 then
TFavItem(FeedTree.FocusedNode.Data).Outline.MoveTo(TFavItem(DesNode.Data).Outline)
else
TFavItem(FeedTree.FocusedNode.Data).Outline.MoveTo(nil);
FeedTree.FocusedNode.MoveTo(DesNode,tlamAddChild);
end;
end;
end;
procedure TMainWindow.FeedTreeCollapsed(Sender: TObject;
ANode: TcxTreeListNode);
begin
if GetRootNode(ANode)=ChannelNode then
begin
ANode.ImageIndex := 0;
ANode.SelectedIndex := 0;
end;
end;
procedure TMainWindow.FeedTreeExpanded(Sender: TObject;
ANode: TcxTreeListNode);
begin
if GetRootNode(ANode)=ChannelNode then
begin
ANode.ImageIndex := 1;
ANode.SelectedIndex := 1;
end;
end;
procedure TMainWindow.C2Click(Sender: TObject);
begin
fmflag.ShowModal;
end;
procedure TMainWindow.PMFlagPopup(Sender: TObject);
var i,fID:Integer;
begin
fID := cxTreeList1.FocusedNode.Values[1];
for i:=PMFlag.Items.Count - 1 downto 0 do // Iterate
begin
if PMFlag.Items.Items[i].Tag = fID then
PMFlag.Items.Items[i].Checked := True
else
PMFlag.Items.Items[i].Checked := False;
end; // for
end;
procedure TMainWindow.actReNameExecute(Sender: TObject);
var
Text:string;
begin
if fmNewFolder.Execute('Rename folder','Type the new folder name:',FeedTree.FocusedNode.Texts[0]) then
begin
Text := fmNewFolder.FolderName;
RenameFolder(FeedTree.FocusedNode,Text);
end;
end;
procedure TMainWindow.actNewExecute(Sender: TObject);
begin
ExecAddNewFeed;
end;
procedure TMainWindow.actNewUpdate(Sender: TObject);
begin
actNew.Enabled := True;
end;
procedure TMainWindow.ActUpdateExecute(Sender: TObject);
begin
if FeedTree.FocusedNode<>nil then
begin
UpdateWithChild(FeedTree.FocusedNode);
end;
end;
procedure TMainWindow.ActUpdateUpdate(Sender: TObject);
begin
ActUpdate.Enabled := (FeedTree.FocusedNode<>nil) and (GetRootNode(FeedTree.FocusedNode)=ChannelNode)
end;
procedure TMainWindow.actReNameUpdate(Sender: TObject);
begin
if FeedTree.FocusedNode=nil then
(Sender as TAction).Enabled := False
else
begin
if FeedTree.FocusedNode.Level=0 then
(Sender as TAction).Enabled:=False
else
begin
if GetRootNode(FeedTree.FocusedNode)=Cha
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -