//
// This file is part of the aMule Project.
//
// Copyright (c) 2003-2026 aMule Team ( https://amule-org.github.io )
// Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net )
//
// Any parts of this program derived from the xMule, lMule or eMule project,
// or contributed by third-party developers are copyrighted by their
// respective authors.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
//

#ifndef SERVERWND_H
#define SERVERWND_H

#include <wx/splitter.h>	// Needed for wxSplitter
#include <wx/listctrl.h>	// Needed for wxListCtrl


class CServerListCtrl;

class CServerWnd : public wxPanel
{
public:
	CServerWnd(wxWindow* pParent, int splitter_pos);   // standard constructor
	virtual ~CServerWnd();

	void UpdateServerMetFromURL(const wxString& strURL);
	void UpdateED2KInfo();
	void UpdateKadInfo();

	CServerListCtrl* serverlistctrl;

	// Shared column-width helper for the two info notebooks (ED2K
	// Info, Kad Info). Pins column 0 to autosize and fills column 1
	// with the remaining client width so the value column doesn't
	// truncate (#813).
	static void FitInfoListColumns(wxListCtrl* list);

	// Copy currently-selected rows of one of the two info notebooks
	// (or all rows when no selection) to the clipboard as
	// tab-separated `<label>\t<value>` lines (#814).
	static void CopyInfoListToClipboard(wxListCtrl* list);

private:
	void OnSashPositionChanging(wxSplitterEvent& evt);
	void OnSashPositionChanged(wxSplitterEvent& evt);
	void OnBnClickedAddserver(wxCommandEvent& evt);
	void OnBnClickedED2KDisconnect(wxCommandEvent& evt);
	void OnBnClickedUpdateservermetfromurl(wxCommandEvent& evt);
	void OnBnClickedResetLog(wxCommandEvent& evt);
	void OnBnClickedResetServerLog(wxCommandEvent& evt);

	// Copy handlers for ED2K Info / Kad Info notebook tabs (#814).
	// Routed through wxEvtHandler bindings rather than the static
	// event table so both list-control IDs can share the same code
	// without a per-ID stanza.
	void OnInfoListKeyDown(wxKeyEvent& evt);
	void OnInfoListContextMenu(wxContextMenuEvent& evt);
	void OnInfoListCopy(wxCommandEvent& evt);

	// Set in OnSashPositionChanging (only fires while the user is
	// actually dragging the sash); checked by OnSashPositionChanged
	// to filter out layout-induced sash moves that fire during
	// minimize/restore reflows on Windows.
	bool m_userDraggingSash = false;

	wxDECLARE_EVENT_TABLE();
};

#endif // SERVERWND_H
// File_checked_for_headers
