You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dvmhost/src/tged/PeerEntryWnd.h

142 lines
3.3 KiB

// SPDX-License-Identifier: GPL-2.0-only
/*
* Digital Voice Modem - Talkgroup Editor
* GPLv2 Open Source. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright (C) 2025 Bryan Biedenkapp, N2PLL
*
*/
/**
* @file PeerEntryWnd.h
* @ingroup tged
*/
#if !defined(__PEER_ENTRY_WND_H__)
#define __PEER_ENTRY_WND_H__
#include "common/Log.h"
#include "tged/CloseWndBase.h"
#include "tged/TGEdMain.h"
#include "tged/TGEditPeerListWnd.h"
#include <final/final.h>
using namespace finalcut;
/**
* @brief This class implements the peer ID entry window.
* @ingroup tged
*/
class HOST_SW_API PeerEntryWnd final : public CloseWndBase {
public:
/**
* @brief Initializes a new instance of the TGEditWnd class.
* @param rule
* @param peerList
* @param title
* @param widget
*/
explicit PeerEntryWnd(std::string title = "Peer Entry", FWidget *widget = nullptr) : CloseWndBase{widget}
{
m_title = title;
peerId = 0U;
}
/**
* @brief Entered peer Id.
*/
uint32_t peerId;
private:
std::string m_title;
FLabel m_entryLabel{"Peer ID: ", this};
PeerLineEdit m_entry{this};
/**
* @brief Initializes the window layout.
*/
void initLayout() override
{
FDialog::setText(m_title);
FDialog::setSize(FSize{40, 6});
m_enableSetButton = false;
CloseWndBase::initLayout();
}
/**
* @brief Initializes window controls.
*/
void initControls() override
{
m_closeButton.setText("&OK");
m_entryLabel.setGeometry(FPoint(2, int(getHeight() - 4)), FSize(10, 1));
m_entry.setGeometry(FPoint(12, int(getHeight() - 4)), FSize(15, 1));
m_entry.setShadow(false);
m_entry.addCallback("up-pressed", [&]() {
peerId = ::atoi(m_entry.getText().c_str());
peerId++;
if (peerId > 999999999U) {
peerId = 999999999U;
}
m_entry.setText(std::to_string(peerId));
redraw();
});
m_entry.addCallback("down-pressed", [&]() {
peerId = ::atoi(m_entry.getText().c_str());
peerId--;
if (peerId < 1U) {
peerId = 1U;
}
m_entry.setText(std::to_string(peerId));
redraw();
});
CloseWndBase::initControls();
m_closeButton.setGeometry(FPoint(int(getWidth()) - 12, int(getHeight()) - 4), FSize(9, 1));
m_closeButton.setText("OK");
setFocusWidget(&m_entry);
redraw();
}
/*
** Event Handlers
*/
/**
* @brief Event that occurs on keyboard key press.
* @param e Keyboard Event.
*/
void onKeyPress(finalcut::FKeyEvent* e) override
{
const auto key = e->key();
if (key == FKey::Enter || key == FKey::Return) {
this->close();
} else if (key == FKey::Escape) {
this->close();
}
}
/**
* @brief Event that occurs when the window is closed.
* @param e Close event.
*/
void onClose(FCloseEvent* e) override
{
if (m_entry.getText() != "") {
peerId = ::atoi(m_entry.getText().c_str());
} else {
peerId = 0U;
}
CloseWndBase::onClose(e);
}
};
#endif // __PEER_ENTRY_WND_H__

Powered by TurnKey Linux.