⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umain.pas

📁 自己写的一个 RSS 阅读器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  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 + -