2021-01-27 Fred Gleason <fredg@paravelsystems.com>

* Added 'RDEndpointListModel'.
	* Refactored the 'List Inputs'/'List Outputs dialogs in rdadmin(1) to
	use the	model-based API.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2021-01-29 08:21:26 -05:00
parent c2dc97289b
commit 5f4be64b52
27 changed files with 1285 additions and 1056 deletions

View File

@ -20937,3 +20937,7 @@
2021-01-27 Fred Gleason <fredg@paravelsystems.com>
* Added 'RDIconEngine::Input' and 'RDIconEngine::Output' icons
to 'RDIconEngine'.
2021-01-27 Fred Gleason <fredg@paravelsystems.com>
* Added 'RDEndpointListModel'.
* Refactored the 'List Inputs'/'List Outputs dialogs in rdadmin(1) to
use the model-based API.

View File

@ -60,6 +60,7 @@ dist_librd_la_SOURCES = dbversion.h\
export_textlog.cpp\
rd.h\
rd3cartdrag.cpp rd3cartdrag.h\
rd3emptycart.cpp rd3emptycart.h\
rdadd_cart.cpp rdadd_cart.h\
rdadd_log.cpp rdadd_log.h\
rdairplay_conf.cpp rdairplay_conf.h\
@ -126,7 +127,7 @@ dist_librd_la_SOURCES = dbversion.h\
rddummylookup.cpp rddummylookup.h\
rdedit_audio.cpp rdedit_audio.h\
rdedit_panel_name.cpp rdedit_panel_name.h\
rd3emptycart.cpp rd3emptycart.h\
rdendpointlistmodel.cpp rdendpointlistmodel.h\
rdescape_string.cpp rdescape_string.h\
rdevent.cpp rdevent.h\
rdevent_line.cpp rdevent_line.h\
@ -274,7 +275,8 @@ dist_librd_la_SOURCES = dbversion.h\
rdxport_interface.h
nodist_librd_la_SOURCES = moc_rdadd_cart.cpp\
nodist_librd_la_SOURCES = moc_rd3emptycart.cpp\
moc_rdadd_cart.cpp\
moc_rdadd_log.cpp\
moc_rdapplication.cpp\
moc_rdaudioconvert.cpp\
@ -313,7 +315,7 @@ nodist_librd_la_SOURCES = moc_rdadd_cart.cpp\
moc_rddummylookup.cpp\
moc_rdedit_audio.cpp\
moc_rdedit_panel_name.cpp\
moc_rd3emptycart.cpp\
moc_rdendpointlistmodel.cpp\
moc_rdevent_player.cpp\
moc_rdexport_settings_dialog.cpp\
moc_rdfeed.cpp\

View File

@ -39,6 +39,7 @@ SOURCES += export_technical.cpp
SOURCES += export_textlog.cpp
SOURCES += html_gpl2.cpp
SOURCES += rd3cartdrag.cpp
SOURCES += rd3emptycart.cpp
SOURCES += rdadd_log.cpp
SOURCES += rdadd_cart.cpp
SOURCES += rdairplay_conf.cpp
@ -93,7 +94,7 @@ SOURCES += rddropboxlistmodel.cpp
SOURCES += rddummylookup.cpp
SOURCES += rdedit_audio.cpp
SOURCES += rdedit_panel_name.cpp
SOURCES += rd3emptycart.cpp
SOURCES += rdendpointlistmodel.cpp
SOURCES += rdescape_string.cpp
SOURCES += rdevent.cpp
SOURCES += rdevent_line.cpp
@ -203,6 +204,7 @@ HEADERS += schedcartlist.h
HEADERS += schedruleslist.h
HEADERS += rd.h
HEADERS += rd3cartdrag.h
HEADERS += rd3emptycart.h
HEADERS += rdadd_cart.h
HEADERS += rdadd_log.h
HEADERS += rdairplay_conf.h
@ -257,7 +259,7 @@ HEADERS += rddropboxlistmodel.h
HEADERS += rddummylookup.h
HEADERS += rdedit_audio.h
HEADERS += rdedit_panel_name.h
HEADERS += rd3emptycart.h
HEADERS += rdendpointlistmodel.h
HEADERS += rdescape_string.h
HEADERS += rdevent.h
HEADERS += rdevent_line.h

View File

@ -901,6 +901,26 @@
<source>Administrator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>
@ -2080,6 +2100,41 @@ Opravdu chcete uložit?</translation>
<translation>&amp;Zrušit</translation>
</message>
</context>
<context>
<name>RDEndpointListModel</name>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDExceptionDialog</name>
<message>

View File

@ -897,6 +897,26 @@
<source>Administrator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>
@ -2057,6 +2077,41 @@ Are you sure you want to save?</source>
<translation>Abbre&amp;chen</translation>
</message>
</context>
<context>
<name>RDEndpointListModel</name>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDExceptionDialog</name>
<message>

View File

@ -897,6 +897,26 @@
<source>Administrator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>
@ -2052,6 +2072,41 @@ Are you sure you want to save?</source>
<translation>&amp;Cancelar</translation>
</message>
</context>
<context>
<name>RDEndpointListModel</name>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDExceptionDialog</name>
<message>

View File

@ -867,6 +867,26 @@
<source>Administrator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>
@ -1784,6 +1804,41 @@ Are you sure you want to save?</source>
<translation>&amp;Annuler</translation>
</message>
</context>
<context>
<name>RDEndpointListModel</name>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDExportSettingsDialog</name>
<message>

View File

@ -897,6 +897,26 @@
<source>Administrator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>
@ -2038,6 +2058,41 @@ Are you sure you want to save?</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
</context>
<context>
<name>RDEndpointListModel</name>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDExceptionDialog</name>
<message>

View File

@ -897,6 +897,26 @@
<source>Administrator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>
@ -2038,6 +2058,41 @@ Are you sure you want to save?</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
</context>
<context>
<name>RDEndpointListModel</name>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDExceptionDialog</name>
<message>

View File

@ -897,6 +897,26 @@
<source>Administrator</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>
@ -2045,6 +2065,41 @@ Are you sure you want to save?</source>
<translation>&amp;Cancelar</translation>
</message>
</context>
<context>
<name>RDEndpointListModel</name>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDExceptionDialog</name>
<message>

379
lib/rdendpointlistmodel.cpp Normal file
View File

@ -0,0 +1,379 @@
// rdendpointlistmodel.cpp
//
// Data model for Rivendell switcher endpoints
//
// (C) Copyright 2021 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include "rdapplication.h"
#include "rdescape_string.h"
#include "rdmatrix.h"
#include "rdendpointlistmodel.h"
RDEndpointListModel::RDEndpointListModel(RDMatrix *mtx,RDMatrix::Endpoint ep,
bool incl_none,QObject *parent)
: QAbstractTableModel(parent)
{
d_mtx=mtx;
d_endpoint=ep;
d_include_none=incl_none;
//
// Column Attributes
//
unsigned left=Qt::AlignLeft|Qt::AlignVCenter;
unsigned center=Qt::AlignCenter;
// unsigned right=Qt::AlignRight|Qt::AlignVCenter;
d_headers.push_back(tr("Name"));
d_alignments.push_back(left);
if(ep==RDMatrix::Input) {
d_table_name="INPUTS";
d_headers.push_back(tr("Input"));
d_alignments.push_back(left);
}
else {
d_table_name="OUTPUTS";
d_headers.push_back(tr("Output"));
d_alignments.push_back(left);
}
switch(d_mtx->type()) {
case RDMatrix::LogitekVguest:
//list_readonly=false;
d_headers.push_back(tr("Engine"));
d_alignments.push_back(center);
d_headers.push_back(tr("Device (Hex)"));
d_alignments.push_back(center);
break;
case RDMatrix::LiveWireLwrpAudio:
//list_readonly=true;
d_headers.push_back(tr("Node"));
d_alignments.push_back(center);
d_headers.push_back(tr("Slot"));
d_alignments.push_back(center);
break;
case RDMatrix::SasUsi:
//list_readonly=true;
break;
default:
//list_readonly=false;
break;
}
updateModel();
}
RDEndpointListModel::~RDEndpointListModel()
{
}
QPalette RDEndpointListModel::palette()
{
return d_palette;
}
void RDEndpointListModel::setPalette(const QPalette &pal)
{
d_palette=pal;
}
void RDEndpointListModel::setFont(const QFont &font)
{
d_font=font;
d_bold_font=font;
d_bold_font.setWeight(QFont::Bold);
}
int RDEndpointListModel::columnCount(const QModelIndex &parent) const
{
return d_headers.size();
}
int RDEndpointListModel::rowCount(const QModelIndex &parent) const
{
return d_texts.size();
}
QVariant RDEndpointListModel::headerData(int section,Qt::Orientation orient,
int role) const
{
if((orient==Qt::Horizontal)&&(role==Qt::DisplayRole)) {
return d_headers.at(section);
}
return QVariant();
}
QVariant RDEndpointListModel::data(const QModelIndex &index,int role) const
{
QString str;
int col=index.column();
int row=index.row();
if(row<d_texts.size()) {
switch((Qt::ItemDataRole)role) {
case Qt::DisplayRole:
return d_texts.at(row).at(col);
case Qt::DecorationRole:
if(col==0) {
if(d_endpoint==RDMatrix::Input) {
return rda->iconEngine()->listIcon(RDIconEngine::Input);
}
else {
return rda->iconEngine()->listIcon(RDIconEngine::Output);
}
}
break;
case Qt::TextAlignmentRole:
return d_alignments.at(col);
case Qt::FontRole:
if(col==0) {
return d_bold_font;
}
return d_font;
case Qt::TextColorRole:
// Nothing to do!
break;
case Qt::BackgroundRole:
// Nothing to do!
break;
default:
break;
}
}
return QVariant();
}
int RDEndpointListModel::endpointId(const QModelIndex &row) const
{
return d_ids.at(row.row());
}
int RDEndpointListModel::endpointNumber(const QModelIndex &row) const
{
return d_texts.at(row.row()).at(1).toInt();
}
QString RDEndpointListModel::endpointName(const QModelIndex &row) const
{
return d_texts.at(row.row()).at(0).toString();
}
int RDEndpointListModel::engineNumber(const QModelIndex &row) const
{
if(d_mtx->type()==RDMatrix::LogitekVguest) {
return d_texts.at(row.row()).at(2).toInt();
}
return -1;
}
int RDEndpointListModel::deviceNumber(const QModelIndex &row) const
{
if(d_mtx->type()==RDMatrix::LogitekVguest) {
return d_texts.at(row.row()).at(3).toString().toInt(NULL,16);
}
return -1;
}
void RDEndpointListModel::refresh(const QModelIndex &row)
{
if(row.row()<d_texts.size()) {
QString sql=sqlFields()+
"where "+
QString().sprintf("ID=%d ",d_ids.at(row.row()));
RDSqlQuery *q=new RDSqlQuery(sql);
if(q->first()) {
updateRow(row.row(),q);
emit dataChanged(createIndex(row.row(),0),
createIndex(row.row(),columnCount()));
}
delete q;
}
}
void RDEndpointListModel::refresh(int id)
{
for(int i=0;i<d_texts.size();i++) {
if(d_texts.at(i).at(0)==id) {
updateRowLine(i);
return;
}
}
}
void RDEndpointListModel::updateModel()
{
QList<QVariant> texts;
RDSqlQuery *q=NULL;
QString sql=sqlFields()+
"where "+
"STATION_NAME=\""+RDEscapeString(d_mtx->station())+"\" && "+
QString().sprintf("MATRIX=%d ",d_mtx->matrix())+
"order by "+d_table_name+".NUMBER ";
beginResetModel();
d_ids.clear();
d_texts.clear();
if(d_include_none) {
d_ids.push_back(-1);
d_texts.push_back(texts);
d_texts.back().push_back(tr("[none]"));
for(int i=1;i<columnCount();i++) {
d_texts.back().push_back(QVariant());
}
}
// printf("SQL: %s\n",sql.toUtf8().constData());
q=new RDSqlQuery(sql);
while(q->next()) {
d_ids.push_back(-1);
d_texts.push_back(texts);
updateRow(d_texts.size()-1,q);
}
delete q;
endResetModel();
}
void RDEndpointListModel::updateRowLine(int line)
{
if(line<d_texts.size()) {
QString sql=sqlFields()+
"where "+
d_table_name+QString().sprintf(".ID=%d ",d_ids.at(line));
RDSqlQuery *q=new RDSqlQuery(sql);
if(q->first()) {
updateRow(line,q);
}
delete q;
}
}
void RDEndpointListModel::updateRow(int row,RDSqlQuery *q)
{
QList<QVariant> texts;
d_ids.back()=q->value(0).toInt();
//
// The first two fields are always the same
///
// Name
texts.push_back(q->value(2));
// Number
texts.push_back(QString().sprintf("%05d",q->value(1).toInt()));
switch(d_mtx->type()) {
case RDMatrix::LogitekVguest:
// Engine Number
if(q->value(3).toInt()>=0) {
texts.push_back(QString().sprintf("%02d",q->value(3).toInt()));
}
else {
texts.push_back("");
}
// Device Number
if(q->value(4).toInt()>=0) {
texts.push_back(QString().sprintf("%04X",q->value(4).toInt()));
}
else {
texts.push_back("");
}
break;
case RDMatrix::LiveWireLwrpAudio:
// Hostname
texts.push_back(q->value(3));
// Slot
texts.push_back(QString().sprintf("%d",q->value(4).toInt()));
break;
default:
break;
}
d_texts[row]=texts;
}
QString RDEndpointListModel::sqlFields() const
{
QString sql;
switch(d_mtx->type()) {
case RDMatrix::LogitekVguest:
sql=QString("select ")+
"ID,"+ // 00
"NUMBER,"+ // 01
"NAME,"+ // 02
"ENGINE_NUM,"+ // 03
"DEVICE_NUM "+ // 04
"from "+d_table_name+" ";
break;
case RDMatrix::LiveWireLwrpAudio:
sql=QString("select ")+
"ID,"+ // 00
"NUMBER,"+ // 01
"NAME,"+ // 02
"NODE_HOSTNAME,"+ // 03
"NODE_SLOT "+ // 04
"from "+d_table_name+" ";
break;
default:
sql=QString("select ")+
"ID,"+ // 00
"NUMBER,"+ // 01
"NAME "+ // 02
"from "+d_table_name+" ";
break;
}
return sql;
}

78
lib/rdendpointlistmodel.h Normal file
View File

@ -0,0 +1,78 @@
// rdendpointlistmodel.h
//
// Data model for Rivendell switcher endpoints
//
// (C) Copyright 2021 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#ifndef RDENDPOINTLISTMODEL_H
#define RDENDPOINTLISTMODEL_H
#include <QAbstractTableModel>
#include <QFont>
#include <QList>
#include <QPalette>
#include <rddb.h>
#include <rdmatrix.h>
#include <rdnotification.h>
#include <rduser.h>
class RDEndpointListModel : public QAbstractTableModel
{
Q_OBJECT
public:
RDEndpointListModel(RDMatrix *mtx,RDMatrix::Endpoint ep,bool include_none,
QObject *parent=0);
~RDEndpointListModel();
QPalette palette();
void setPalette(const QPalette &pal);
void setFont(const QFont &font);
int columnCount(const QModelIndex &parent=QModelIndex()) const;
int rowCount(const QModelIndex &parent=QModelIndex()) const;
QVariant headerData(int section,Qt::Orientation orient,
int role=Qt::DisplayRole) const;
QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const;
int endpointId(const QModelIndex &row) const;
int endpointNumber(const QModelIndex &row) const;
int engineNumber(const QModelIndex &row) const;
int deviceNumber(const QModelIndex &row) const;
QString endpointName(const QModelIndex &row) const;
void refresh(const QModelIndex &row);
void refresh(int id);
protected:
void updateModel();
void updateRowLine(int line);
void updateRow(int row,RDSqlQuery *q);
QString sqlFields() const;
private:
QPalette d_palette;
QFont d_font;
QFont d_bold_font;
QList<QVariant> d_headers;
QList<QVariant> d_alignments;
QList<QList<QVariant> > d_texts;
QList<int> d_ids;
RDMatrix *d_mtx;
RDMatrix::Endpoint d_endpoint;
bool d_include_none;
QString d_table_name;
};
#endif // RDENDPOINTLISTMODEL_H

View File

@ -815,6 +815,46 @@ QString RDMatrix::typeString(RDMatrix::Type type)
}
QString RDMatrix::modeString(RDMatrix::Mode mode)
{
QString ret=QObject::tr("Unknown");
switch(mode) {
case RDMatrix::Left:
ret=QObject::tr("Left");
break;
case RDMatrix::Right:
ret=QObject::tr("Right");
break;
case RDMatrix::Stereo:
ret=QObject::tr("Stereo");
break;
}
return ret;
}
QString RDMatrix::endpointString(RDMatrix::Endpoint ep)
{
QString ret=QObject::tr("Unknown");
switch(ep) {
case RDMatrix::Input:
ret=QObject::tr("Input");
break;
case RDMatrix::Output:
ret=QObject::tr("Output");
break;
}
return ret;
}
bool RDMatrix::controlActive(RDMatrix::Type type,RDMatrix::Role role,
RDMatrix::Control control)
{

View File

@ -109,6 +109,8 @@ class RDMatrix
int displays() const;
void setDisplays(int quan) const;
static QString typeString(RDMatrix::Type type);
static QString modeString(RDMatrix::Mode mode);
static QString endpointString(RDMatrix::Endpoint ep);
static bool controlActive(RDMatrix::Type type,RDMatrix::Role role,
RDMatrix::Control control);
static bool controlActive(RDMatrix::Type type,RDMatrix::Control control);

View File

@ -252,7 +252,7 @@ void RDUserListModel::updateModel()
beginResetModel();
d_texts.clear();
d_icons.clear();
printf("SQL: %s\n",sql.toUtf8().constData());
// printf("SQL: %s\n",sql.toUtf8().constData());
q=new RDSqlQuery(sql);
while(q->next()) {
d_texts.push_back(texts);

View File

@ -18,26 +18,24 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <qmessagebox.h>
#include <QMessageBox>
#include <rdescape_string.h>
#include <rdtextvalidator.h>
#include <edit_endpoint.h>
EditEndpoint::EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
int pointnum,QString *pointname,QString *feedname,
RDMatrix::Mode *mode,int *enginenum,int *devicenum,
QWidget *parent)
int pointnum,QString *pointname,int *enginenum,
int *devicenum,QWidget *parent)
: RDDialog(parent)
{
setModal(true);
/*
edit_mtx=NULL;
edit_type=type;
edit_endpoint=endpoint;
edit_pointnum=pointnum;
edit_pointname=pointname;
edit_feedname=feedname;
edit_mode=mode;
edit_enginenum=enginenum;
edit_devicenum=devicenum;
@ -52,7 +50,7 @@ EditEndpoint::EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
setWindowTitle("RDAdmin - "+tr("Edit Output"));
break;
}
*/
//
// Fix the Window Size
//
@ -78,79 +76,24 @@ EditEndpoint::EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
label->setAlignment(Qt::AlignRight);
//
// Unity Feed
//
edit_feed_edit=new QLineEdit(this);
edit_feed_edit->setGeometry(75,40,40,20);
edit_feed_edit->setValidator(validator);
label=new QLabel(edit_feed_edit,tr("Feed: "),this);
label->setGeometry(10,43,60,20);
label->setFont(labelFont());
label->setAlignment(Qt::AlignRight);
if((edit_type!=RDMatrix::Unity4000)||(edit_endpoint!=RDMatrix::Input)) {
edit_feed_edit->hide();
label->hide();
}
//
// Unity Mode
//
edit_mode_box=new QComboBox(this);
label=new QLabel(edit_mode_box,tr("Mode: "),this);
if(edit_type==RDMatrix::StarGuideIII) {
edit_mode_box->setGeometry(135,88,85,24);
label->setGeometry(10,93,120,20);
}
else {
edit_mode_box->setGeometry(195,40,85,24);
label->setGeometry(130,43,60,20);
}
label->setFont(labelFont());
label->setAlignment(Qt::AlignRight);
if(((edit_type!=RDMatrix::Unity4000)&&(edit_type!=RDMatrix::StarGuideIII))||
(edit_endpoint!=RDMatrix::Input)) {
edit_mode_box->hide();
label->hide();
}
edit_mode_box->insertItem(tr("Stereo"));
edit_mode_box->insertItem(tr("Left"));
edit_mode_box->insertItem(tr("Right"));
//
// Logitek Engine Number / StarGuide Provider ID
// Logitek Engine Number
//
edit_enginenum_edit=new QLineEdit(this);
edit_enginenum_edit->setGeometry(135,36,50,20);
label=new QLabel(edit_enginenum_edit,tr("Engine (Hex): "),this);
if(edit_type==RDMatrix::StarGuideIII) {
label->setText(tr("Provider ID:"));
}
label->setGeometry(10,36,120,20);
label->setFont(labelFont());
label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
if((edit_type!=RDMatrix::LogitekVguest)&&
((edit_type!=RDMatrix::StarGuideIII)||(edit_endpoint!=RDMatrix::Input))) {
edit_enginenum_edit->hide();
label->hide();
}
edit_enginenum_label=new QLabel(edit_enginenum_edit,tr("Engine (Hex): "),this);
edit_enginenum_label->setGeometry(10,36,120,20);
edit_enginenum_label->setFont(labelFont());
edit_enginenum_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
//
// Logitek Device Number / StarGuide Service ID
// Logitek Device Number
//
edit_devicenum_edit=new QLineEdit(this);
edit_devicenum_edit->setGeometry(135,62,50,20);
label=new QLabel(edit_devicenum_edit,tr("Device (Hex): "),this);
if(edit_type==RDMatrix::StarGuideIII) {
label->setText(tr("Service ID:"));
}
label->setGeometry(10,62,120,20);
label->setFont(labelFont());
label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
if((edit_type!=RDMatrix::LogitekVguest)&&
((edit_type!=RDMatrix::StarGuideIII)||(edit_endpoint!=RDMatrix::Input))) {
edit_devicenum_edit->hide();
label->hide();
}
edit_devicenum_label=new QLabel(edit_devicenum_edit,tr("Device (Hex): "),this);
edit_devicenum_label->setGeometry(10,62,120,20);
edit_devicenum_label->setFont(labelFont());
edit_devicenum_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
//
// Ok Button
@ -174,9 +117,8 @@ EditEndpoint::EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
//
// Load Data
//
/*
edit_endpoint_edit->setText(*edit_pointname);
edit_feed_edit->setText(*edit_feedname);
edit_mode_box->setCurrentItem(*edit_mode);
if(*enginenum>=0) {
if(edit_type==RDMatrix::LogitekVguest) {
edit_enginenum_edit->setText(QString().sprintf("%04X",*enginenum));
@ -193,17 +135,12 @@ EditEndpoint::EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
edit_devicenum_edit->setText(QString().sprintf("%d",*devicenum));
}
}
*/
}
QSize EditEndpoint::sizeHint() const
{
if((edit_endpoint==RDMatrix::Input)&&(edit_type==RDMatrix::Unity4000)) {
return QSize(400,130);
}
if((edit_endpoint==RDMatrix::Input)&&(edit_type==RDMatrix::StarGuideIII)) {
return QSize(420,156);
}
return QSize(400,100);
}
@ -214,8 +151,65 @@ QSizePolicy EditEndpoint::sizePolicy() const
}
int EditEndpoint::exec(RDMatrix *mtx,RDMatrix::Endpoint endpt_type,int endpt_id)
{
QString sql;
RDSqlQuery *q=NULL;
edit_mtx=mtx;
edit_endpoint_type=endpt_type;
edit_endpoint_id=endpt_id;
if(endpt_type==RDMatrix::Input) {
edit_table="INPUTS";
setWindowTitle("RDAdmin - "+tr("Edit Input"));
}
else {
edit_table="OUTPUTS";
setWindowTitle("RDAdmin - "+tr("Edit Output"));
}
sql=QString("select ")+
"NAME,"+ // 00
"ENGINE_NUM,"+ // 01
"DEVICE_NUM "+ // 02
"from "+edit_table+" where "+
QString().sprintf("ID=%d",endpt_id);
printf("SQL: %s\n",sql.toUtf8().constData());
q=new RDSqlQuery(sql);
if(q->first()) {
edit_endpoint_edit->setText(q->value(0).toString());
edit_enginenum_edit->setText(QString().sprintf("%d",q->value(1).toInt()));
edit_devicenum_edit->
setText(QString().sprintf("%04X",q->value(2).toInt()));
}
delete q;
if(mtx->type()!=RDMatrix::LogitekVguest) {
edit_enginenum_label->hide();
edit_enginenum_edit->hide();
edit_devicenum_label->hide();
edit_devicenum_edit->hide();
}
return QDialog::exec();
}
void EditEndpoint::okData()
{
QString sql;
sql=QString("update ")+edit_table+" set "+
"NAME=\""+RDEscapeString(edit_endpoint_edit->text())+"\","+
QString().sprintf("ENGINE_NUM=%d,",edit_enginenum_edit->text().toInt())+
QString().
sprintf("DEVICE_NUM=%d ",edit_devicenum_edit->text().toInt(NULL,16))+
"where "+
QString().sprintf("ID=%d",edit_endpoint_id);
RDSqlQuery::apply(sql);
/*
bool ok;
int enginenum=-1;
if(edit_type==RDMatrix::LogitekVguest) {
@ -264,15 +258,14 @@ void EditEndpoint::okData()
}
}
*edit_pointname=edit_endpoint_edit->text();
*edit_feedname=edit_feed_edit->text();
*edit_mode=(RDMatrix::Mode)edit_mode_box->currentItem();
*edit_enginenum=enginenum;
*edit_devicenum=devicenum;
done(0);
*/
done(true);
}
void EditEndpoint::cancelData()
{
done(1);
done(false);
}

View File

@ -35,31 +35,34 @@ class EditEndpoint : public RDDialog
Q_OBJECT
public:
EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
int pointnum,QString *pointname,QString *feedname,
RDMatrix::Mode *mode,int *enginenum,int *devicenum,
int pointnum,QString *pointname,int *enginenum,int *devicenum,
QWidget *parent=0);
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
public slots:
int exec(RDMatrix *mtx,RDMatrix::Endpoint endpt_type,int endpt_id);
private slots:
void okData();
void cancelData();
private:
RDMatrix::Type edit_type;
RDMatrix::Endpoint edit_endpoint;
RDMatrix *edit_mtx;
RDMatrix::Endpoint edit_endpoint_type;
int edit_pointnum;
/*
QString *edit_pointname;
QString *edit_feedname;
RDMatrix::Mode *edit_mode;
int *edit_enginenum;
int *edit_devicenum;
*/
QString edit_table;
QLineEdit *edit_endpoint_edit;
QLineEdit *edit_feed_edit;
QLabel *edit_enginenum_label;
QLineEdit *edit_enginenum_edit;
QLabel *edit_devicenum_label;
QLineEdit *edit_devicenum_edit;
QComboBox *edit_mode_box;
int edit_endpoint_id;
};

View File

@ -2,7 +2,7 @@
//
// List a Rivendell Endpoints
//
// (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -30,11 +30,6 @@ ListEndpoints::ListEndpoints(RDMatrix *matrix,RDMatrix::Endpoint endpoint,
QWidget *parent)
: RDDialog(parent)
{
setModal(true);
QString sql;
RDSqlQuery *q;
Q3ListViewItem *l;
QString str;
list_matrix=matrix;
@ -61,77 +56,19 @@ ListEndpoints::ListEndpoints(RDMatrix *matrix,RDMatrix::Endpoint endpoint,
//
// Endpoints List Box
//
list_list_view=new Q3ListView(this);
list_list_view=new RDTableView(this);
list_list_model=new RDEndpointListModel(matrix,endpoint,false,this);
list_list_model->setFont(defaultFont());
list_list_model->setPalette(palette());
list_list_view->setModel(list_list_model);
list_type_label=new QLabel(list_list_view,list_table,this);
list_type_label->setFont(labelFont());
list_type_label->setGeometry(14,5,85,19);
list_list_view->setAllColumnsShowFocus(true);
list_list_view->setItemMargin(5);
switch(list_endpoint) {
case RDMatrix::Input:
list_list_view->addColumn(tr("INPUT"));
break;
case RDMatrix::Output:
list_list_view->addColumn(tr("OUTPUT"));
break;
}
list_list_view->setColumnAlignment(0,Qt::AlignHCenter);
list_list_view->addColumn(tr("LABEL"));
list_list_view->setColumnAlignment(1,Qt::AlignLeft);
switch(matrix->type()) {
case RDMatrix::Unity4000:
list_readonly=false;
if(list_endpoint==RDMatrix::Input) {
list_list_view->addColumn(tr("SOURCE"));
list_list_view->setColumnAlignment(2,Qt::AlignHCenter);
list_list_view->addColumn(tr("MODE"));
list_list_view->setColumnAlignment(3,Qt::AlignHCenter);
}
break;
case RDMatrix::LogitekVguest:
list_readonly=false;
list_list_view->addColumn(tr("ENGINE (Hex)"));
list_list_view->setColumnAlignment(2,Qt::AlignHCenter);
list_list_view->addColumn(tr("DEVICE (Hex)"));
list_list_view->setColumnAlignment(2,Qt::AlignHCenter);
break;
case RDMatrix::StarGuideIII:
list_readonly=false;
if(list_endpoint==RDMatrix::Input) {
list_list_view->addColumn(tr("PROVIDER ID"));
list_list_view->setColumnAlignment(2,Qt::AlignHCenter);
list_list_view->addColumn(tr("SERVICE ID"));
list_list_view->setColumnAlignment(3,Qt::AlignHCenter);
list_list_view->addColumn(tr("MODE"));
list_list_view->setColumnAlignment(4,Qt::AlignHCenter);
}
break;
case RDMatrix::LiveWireLwrpAudio:
list_readonly=true;
list_list_view->addColumn(tr("NODE"));
list_list_view->setColumnAlignment(2,Qt::AlignHCenter);
list_list_view->addColumn(tr("#"));
list_list_view->setColumnAlignment(3,Qt::AlignHCenter);
break;
case RDMatrix::SasUsi:
list_readonly=true;
break;
default:
list_readonly=false;
break;
}
if(!list_readonly) {
connect(list_list_view,
SIGNAL(doubleClicked(Q3ListViewItem *,const QPoint &,int)),
this,
SLOT(doubleClickedData(Q3ListViewItem *,const QPoint &,int)));
}
connect(list_list_view,SIGNAL(doubleClicked(const QModelIndex &)),
this,SLOT(doubleClickedData(const QModelIndex &)));
connect(list_list_model,SIGNAL(modelReset()),
list_list_view,SLOT(resizeColumnsToContents()));
list_list_view->resizeColumnsToContents();
//
// Edit Button
@ -142,217 +79,13 @@ ListEndpoints::ListEndpoints(RDMatrix *matrix,RDMatrix::Endpoint endpoint,
connect(list_edit_button,SIGNAL(clicked()),this,SLOT(editData()));
list_edit_button->setDisabled(list_readonly);
//
// Ok Button
//
list_ok_button=new QPushButton(this);
list_ok_button->setDefault(true);
list_ok_button->setFont(buttonFont());
list_ok_button->setText(tr("&OK"));
connect(list_ok_button,SIGNAL(clicked()),this,SLOT(okData()));
//
// Cancel Button
//
list_cancel_button=new QPushButton(this);
list_cancel_button->setFont(buttonFont());
list_cancel_button->setText(tr("&Cancel"));
connect(list_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
//
// Load Values
//
switch(list_matrix->type()) {
case RDMatrix::Unity4000:
if(list_endpoint==RDMatrix::Input) {
sql=QString("select ")+
"NUMBER,"+ // 00
"NAME,"+ // 01
"FEED_NAME,"+ // 02
"CHANNEL_MODE "+ // 03
"from `"+list_table+"` where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d ",list_matrix->matrix())+
"order by NUMBER";
}
else {
sql=QString("select ")+
"NUMBER,"+ // 00
"NAME "+ // 01
"from `"+list_table+"` where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d ",list_matrix->matrix())+
"order by NUMBER";
}
break;
case RDMatrix::LogitekVguest:
sql=QString("select ")+
"NUMBER,"+ // 00
"NAME,"+ // 01
"ENGINE_NUM,"+ // 02
"DEVICE_NUM "+ // 03
"from `"+list_table+"` where "+
"(STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\")&&"+
QString().sprintf("MATRIX=%d ",list_matrix->matrix())+
"order by NUMBER";
break;
case RDMatrix::StarGuideIII:
if(list_endpoint==RDMatrix::Input) {
sql=QString("select ")+
"NUMBER,"+ // 00
"NAME,"+ // 01
"ENGINE_NUM,"+ // 02
"DEVICE_NUM,"+ // 03
"CHANNEL_MODE "+ // 04
"from `"+list_table+"` where "+
"(STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\")&&"+
QString().sprintf("MATRIX=%d ",list_matrix->matrix())+
"order by NUMBER";
}
else {
sql=QString("select ")+
"NUMBER,"+ // 00
"NAME "+ // 01
"from `"+list_table+"` where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d ",list_matrix->matrix())+
"order by NUMBER";
}
break;
case RDMatrix::LiveWireLwrpAudio:
sql=QString("select ")+
"NUMBER,"+ // 00
"NAME,"+ // 01
"NODE_HOSTNAME,"+ // 02
"NODE_SLOT "+ // 03
"from `"+list_table+"` where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d ",list_matrix->matrix())+
"order by NUMBER";
break;
default:
sql=QString("select ")+
"NUMBER,"+ // 00
"NAME "+ // 01
"from `"+list_table+"` where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d ",list_matrix->matrix())+
"order by NUMBER";
break;
}
q=new RDSqlQuery(sql);
if(list_matrix->type()==RDMatrix::LiveWireLwrpAudio) {
while(q->next()) {
l=new Q3ListViewItem(list_list_view);
l->setText(0,QString().sprintf("%05d",q->value(0).toInt()));
l->setText(1,q->value(1).toString());
l->setText(2,q->value(2).toString());
l->setText(3,QString().sprintf("%d",q->value(3).toInt()));
}
}
else {
q->first();
for(int i=0;i<list_size;i++) {
l=new Q3ListViewItem(list_list_view);
l->setText(0,QString().sprintf("%04d",i+1));
if(q->isValid()&&(q->value(0).toInt()==(i+1))){
l->setText(1,q->value(1).toString());
switch(list_matrix->type()) {
case RDMatrix::Unity4000:
if(list_endpoint==RDMatrix::Input) {
l->setText(2,q->value(2).toString());
switch((RDMatrix::Mode)q->value(3).toInt()) {
case RDMatrix::Stereo:
l->setText(3,tr("Stereo"));
break;
case RDMatrix::Left:
l->setText(3,tr("Left"));
break;
case RDMatrix::Right:
l->setText(3,tr("Right"));
break;
}
}
break;
case RDMatrix::LogitekVguest:
if(q->value(2).toInt()>=0) {
l->setText(2,QString().sprintf("%04X",q->value(2).toInt()));
}
else {
l->setText(2,"");
}
if(q->value(3).toInt()>=0) {
l->setText(3,QString().sprintf("%04X",q->value(3).toInt()));
}
else {
l->setText(3,"");
}
break;
case RDMatrix::StarGuideIII:
if(list_endpoint==RDMatrix::Input) {
if(q->value(2).toInt()>=0) {
l->setText(2,q->value(2).toString());
}
if(q->value(3).toInt()>=0) {
l->setText(3,q->value(3).toString());
}
switch((RDMatrix::Mode)q->value(4).toInt()) {
case RDMatrix::Stereo:
l->setText(4,tr("Stereo"));
break;
case RDMatrix::Left:
l->setText(4,tr("Left"));
break;
case RDMatrix::Right:
l->setText(4,tr("Right"));
break;
}
}
break;
default:
break;
}
q->next();
}
else {
switch(list_endpoint) {
case RDMatrix::Input:
str=QString(tr("Input"));
l->setText(1,str+QString().sprintf(" %03d",i+1));
switch(list_matrix->type()) {
case RDMatrix::Unity4000:
l->setText(3,tr("Stereo"));
break;
case RDMatrix::StarGuideIII:
l->setText(4,tr("Stereo"));
break;
default:
break;
}
break;
case RDMatrix::Output:
str=QString(tr("Output"));
l->setText(1,str+QString().sprintf(" %03d",i+1));
break;
}
}
}
}
delete q;
list_close_button=new QPushButton(this);
list_close_button->setFont(buttonFont());
list_close_button->setText(tr("&Close"));
connect(list_close_button,SIGNAL(clicked()),this,SLOT(closeData()));
}
@ -370,329 +103,36 @@ QSizePolicy ListEndpoints::sizePolicy() const
void ListEndpoints::editData()
{
Q3ListViewItem *item;
RDMatrix::Mode mode=RDMatrix::Stereo;
bool ok;
QString feedname;
int enginenum=-1;
int devicenum=-1;
QModelIndexList rows=list_list_view->selectionModel()->selectedRows();
if((item=list_list_view->selectedItem())==NULL) {
if(rows.size()!=1) {
return;
}
int pointnum=item->text(0).toInt()-1;
QString pointname=item->text(1);
switch(list_matrix->type()) {
case RDMatrix::Unity4000:
feedname=item->text(2);
if(item->text(3).lower()==QString(tr("stereo"))) {
mode=RDMatrix::Stereo;
}
if(item->text(3).lower()==QString(tr("left"))) {
mode=RDMatrix::Left;
}
if(item->text(3).lower()==QString(tr("right"))) {
mode=RDMatrix::Right;
}
break;
case RDMatrix::LogitekVguest:
enginenum=item->text(2).toInt(&ok,16);
if(!ok) {
enginenum=-1;
}
devicenum=item->text(3).toInt(&ok,16);
if(!ok) {
devicenum=-1;
}
break;
case RDMatrix::StarGuideIII:
enginenum=item->text(2).toInt(&ok);
if(!ok) {
enginenum=-1;
}
devicenum=item->text(3).toInt(&ok);
if(!ok) {
devicenum=-1;
}
if(item->text(4).lower()==QString(tr("stereo"))) {
mode=RDMatrix::Stereo;
}
if(item->text(4).lower()==QString(tr("left"))) {
mode=RDMatrix::Left;
}
if(item->text(4).lower()==QString(tr("right"))) {
mode=RDMatrix::Right;
}
break;
default:
break;
}
int pointnum=list_list_model->endpointNumber(rows.first())-1;
QString pointname=list_list_model->endpointName(rows.first());
int enginenum=list_list_model->engineNumber(rows.first());
int devicenum=list_list_model->deviceNumber(rows.first());
EditEndpoint *edit=new EditEndpoint(list_matrix->type(),list_endpoint,
pointnum,&pointname,&feedname,&mode,
pointnum,&pointname,
&enginenum,&devicenum,this);
if(edit->exec()==0) {
item->setText(1,pointname);
item->setText(2,feedname);
switch(list_matrix->type()) {
case RDMatrix::Unity4000:
if(list_endpoint==RDMatrix::Input) {
switch(mode) {
case RDMatrix::Stereo:
item->setText(3,tr("Stereo"));
break;
case RDMatrix::Left:
item->setText(3,tr("Left"));
break;
case RDMatrix::Right:
item->setText(3,tr("Right"));
break;
}
}
break;
case RDMatrix::LogitekVguest:
if(enginenum>=0) {
item->setText(2,QString().sprintf("%04X",enginenum));
}
else {
item->setText(2,"");
}
if(devicenum>=0) {
item->setText(3,QString().sprintf("%04X",devicenum));
}
else {
item->setText(3,"");
}
break;
case RDMatrix::StarGuideIII:
if(enginenum>=0) {
item->setText(2,QString().sprintf("%d",enginenum));
}
else {
item->setText(2,"");
}
if(devicenum>=0) {
item->setText(3,QString().sprintf("%d",devicenum));
}
else {
item->setText(3,"");
}
if(list_endpoint==RDMatrix::Input) {
switch(mode) {
case RDMatrix::Stereo:
item->setText(4,tr("Stereo"));
break;
case RDMatrix::Left:
item->setText(4,tr("Left"));
break;
case RDMatrix::Right:
item->setText(4,tr("Right"));
break;
}
}
break;
default:
break;
}
if(edit->exec(list_matrix,list_endpoint,
list_list_model->endpointId(rows.first()))) {
list_list_model->refresh(rows.first());
}
delete edit;
}
void ListEndpoints::doubleClickedData(Q3ListViewItem *item,const QPoint &pt,
int col)
void ListEndpoints::doubleClickedData(const QModelIndex &index)
{
editData();
}
void ListEndpoints::okData()
void ListEndpoints::closeData()
{
if(!list_readonly) {
Q3ListViewItem *item;
QString sql;
RDSqlQuery *q;
RDMatrix::Mode mode=RDMatrix::Stereo;
int enginenum;
int devicenum;
int modecol=3;
if(list_matrix->type()==RDMatrix::StarGuideIII) {
modecol=4;
}
for(int i=0;i<list_size;i++) {
item=list_list_view->findItem(QString().sprintf("%04d",i+1),0);
if(item->text(modecol).lower()==QString(tr("stereo"))) {
mode=RDMatrix::Stereo;
}
if(item->text(modecol).lower()==QString(tr("left"))) {
mode=RDMatrix::Left;
}
if(item->text(modecol).lower()==QString(tr("right"))) {
mode=RDMatrix::Right;
}
sql=QString("select ID from `")+
list_table+"` where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",list_matrix->matrix())+
QString().sprintf("NUMBER=%d",i+1);
q=new RDSqlQuery(sql);
if(!q->first()) {
delete q;
sql=QString("insert into `")+list_table+"` set "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\","+
QString().sprintf("MATRIX=%d,",list_matrix->matrix())+
QString().sprintf("NUMBER=%d,",i+1)+
"NAME=\""+RDEscapeString(item->text(1))+"\"";
switch(list_matrix->type()) {
case RDMatrix::Unity4000:
if(list_endpoint==RDMatrix::Input) {
sql+=QString(",FEED_NAME=\"")+RDEscapeString(item->text(2))+"\","+
QString().sprintf("CHANNEL_MODE=%d",mode);
}
break;
case RDMatrix::LogitekVguest:
if(item->text(2).isEmpty()) {
sql+=",ENGINE_NUM=-1";
}
else {
sql+=QString().sprintf(",ENGINE_NUM=%d",
item->text(2).toInt(NULL,16));
}
if(item->text(3).isEmpty()) {
sql+=",DEVICE_NUM=-1";
}
else {
sql+=QString().sprintf(",DEVICE_NUM=%d",
item->text(3).toInt(NULL,16));
}
break;
case RDMatrix::StarGuideIII:
if(item->text(2).isEmpty()) {
sql+=",ENGINE_NUM=-1";
}
else {
sql+=QString().sprintf(",ENGINE_NUM=%d",
item->text(2).toInt());
}
if(item->text(3).isEmpty()) {
sql+=",DEVICE_NUM=-1";
}
else {
sql+=QString().sprintf(",DEVICE_NUM=%d",
item->text(3).toInt());
}
if(list_endpoint==RDMatrix::Input) {
sql+=QString().sprintf(",CHANNEL_MODE=%d",mode);
}
break;
default:
break;
}
q=new RDSqlQuery(sql);
delete q;
}
else {
delete q;
switch(list_matrix->type()) {
case RDMatrix::Unity4000:
if(list_endpoint==RDMatrix::Input) {
sql=QString("update `")+list_table+"` set "+
"NAME=\""+RDEscapeString(item->text(1))+"\","+
"FEED_NAME=\""+RDEscapeString(item->text(2))+"\","+
QString().sprintf("CHANNEL_MODE=%d where ",mode)+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",list_matrix->matrix())+
QString().sprintf("NUMBER=%d",i+1);
}
else {
sql=QString("update `")+list_table+"` set "+
"NAME=\""+RDEscapeString(item->text(1))+"\" where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",list_matrix->matrix())+
QString().sprintf("NUMBER=%d",i+1);
}
break;
case RDMatrix::LogitekVguest:
if(item->text(2).isEmpty()) {
enginenum=-1;
}
else {
enginenum=item->text(2).toInt(NULL,16);
}
if(item->text(3).isEmpty()) {
devicenum=-1;
}
else {
devicenum=item->text(3).toInt(NULL,16);
}
sql=QString("update `")+list_table+"` set "+
"NAME=\""+RDEscapeString(item->text(1))+"\","+
QString().sprintf("ENGINE_NUM=%d,",enginenum)+
QString().sprintf("DEVICE_NUM=%d where ",devicenum)+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",list_matrix->matrix())+
QString().sprintf("NUMBER=%d",i+1);
break;
case RDMatrix::StarGuideIII:
if(list_endpoint==RDMatrix::Input) {
if(item->text(2).isEmpty()) {
enginenum=-1;
}
else {
enginenum=item->text(2).toInt(NULL);
}
if(item->text(3).isEmpty()) {
devicenum=-1;
}
else {
devicenum=item->text(3).toInt(NULL);
}
sql=QString("update `")+list_table+"` set "+
"NAME=\""+RDEscapeString(item->text(1))+"\","+
QString().sprintf("ENGINE_NUM=%d,",enginenum)+
QString().sprintf("DEVICE_NUM=%d,",devicenum)+
QString().sprintf("CHANNEL_MODE=%d where ",mode)+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",list_matrix->matrix())+
QString().sprintf("NUMBER=%d",i+1);
}
break;
default:
sql=QString("update `")+list_table+"` set "+
"NAME=\""+RDEscapeString(item->text(1))+"\" where "+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",list_matrix->matrix())+
QString().sprintf("NUMBER=%d",i+1);
break;
}
q=new RDSqlQuery(sql);
delete q;
}
}
}
done(0);
}
void ListEndpoints::cancelData()
{
done(1);
done(true);
}
@ -701,6 +141,5 @@ void ListEndpoints::resizeEvent(QResizeEvent *e)
list_list_view->
setGeometry(10,24,size().width()-20,size().height()-94);
list_edit_button->setGeometry(10,size().height()-60,80,50);
list_ok_button->setGeometry(size().width()-180,size().height()-60,80,50);
list_cancel_button->setGeometry(size().width()-90,size().height()-60,80,50);
list_close_button->setGeometry(size().width()-90,size().height()-60,80,50);
}

View File

@ -2,7 +2,7 @@
//
// List Rivendell Endpoints
//
// (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -21,13 +21,13 @@
#ifndef LIST_ENDPOINTS_H
#define LIST_ENDPOINTS_H
#include <q3listview.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <QLabel>
#include <QPushButton>
#include <rddialog.h>
#include <rdendpointlistmodel.h>
#include <rdmatrix.h>
#include <rdtableview.h>
#include <rduser.h>
class ListEndpoints : public RDDialog
@ -40,9 +40,8 @@ class ListEndpoints : public RDDialog
private slots:
void editData();
void doubleClickedData(Q3ListViewItem *item,const QPoint &pt,int col);
void okData();
void cancelData();
void doubleClickedData(const QModelIndex &index);
void closeData();
protected:
void resizeEvent(QResizeEvent *e);
@ -50,16 +49,15 @@ class ListEndpoints : public RDDialog
private:
RDMatrix *list_matrix;
RDMatrix::Endpoint list_endpoint;
Q3ListView *list_list_view;
RDTableView *list_list_view;
RDEndpointListModel *list_list_model;
QLabel *list_type_label;
QPushButton *list_edit_button;
QPushButton *list_ok_button;
QPushButton *list_cancel_button;
QPushButton *list_close_button;
int list_size;
QString list_table;
bool list_readonly;
};
#endif
#endif // LIST_ENDPOINTS_H

View File

@ -55,7 +55,7 @@ ListMatrices::ListMatrices(QString station,QWidget *parent)
list_model->setPalette(palette());
list_view->setModel(list_model);
list_title_label=
new QLabel(list_view,tr("&Replicators:"),this);
new QLabel(list_view,tr("Switcher/GPIO Devices")+":",this);
list_title_label->setFont(labelFont());
connect(list_view,SIGNAL(doubleClicked(const QModelIndex &)),
this,SLOT(doubleClickedData(const QModelIndex &)));
@ -215,7 +215,7 @@ void ListMatrices::closeData()
void ListMatrices::resizeEvent(QResizeEvent *e)
{
list_view->setGeometry(10,24,size().width()-20,size().height()-94);
list_title_label->setGeometry(14,5,85,19);
list_title_label->setGeometry(14,5,size().width()-20,19);
list_add_button->setGeometry(10,size().height()-60,80,50);
list_edit_button->setGeometry(100,size().height()-60,80,50);
list_delete_button->setGeometry(190,size().height()-60,80,50);

View File

@ -1358,11 +1358,11 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEndpoint</name>
<message>
<source>Edit Input</source>
<translation>Upravit vstup</translation>
<translation type="unfinished">Upravit vstup</translation>
</message>
<message>
<source>Edit Output</source>
<translation>Upravit výstup</translation>
<translation type="unfinished">Upravit výstup</translation>
</message>
<message>
<source>Name: </source>
@ -1370,23 +1370,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Feed: </source>
<translation>Přívod:</translation>
<translation type="obsolete">Přívod:</translation>
</message>
<message>
<source>Mode: </source>
<translation>Režim: </translation>
<translation type="obsolete">Režim: </translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Vlevo</translation>
<translation type="obsolete">Vlevo</translation>
</message>
<message>
<source>Right</source>
<translation>Vpravo</translation>
<translation type="obsolete">Vpravo</translation>
</message>
<message>
<source>Engine (Hex): </source>
@ -1394,7 +1394,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Provider ID:</source>
<translation>ID poskytovatele:</translation>
<translation type="obsolete">ID poskytovatele:</translation>
</message>
<message>
<source>Device (Hex): </source>
@ -1402,7 +1402,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Service ID:</source>
<translation>ID služby:</translation>
<translation type="obsolete">ID služby:</translation>
</message>
<message>
<source>&amp;OK</source>
@ -1414,23 +1414,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Invalid Number</source>
<translation>Neplatné číslo</translation>
<translation type="obsolete">Neplatné číslo</translation>
</message>
<message>
<source>The Engine Number is Invalid!</source>
<translation>Číslo stroje je neplatné!</translation>
<translation type="obsolete">Číslo stroje je neplatné!</translation>
</message>
<message>
<source>The Provider ID is Invalid!</source>
<translation>ID poskytovatele je neplatné!</translation>
<translation type="obsolete">ID poskytovatele je neplatné!</translation>
</message>
<message>
<source>The Device Number is Invalid!</source>
<translation>Číslo zařízení je neplatné!</translation>
<translation type="obsolete">Číslo zařízení je neplatné!</translation>
</message>
<message>
<source>The Service ID is Invalid!</source>
<translation>ID služby je neplatné!</translation>
<translation type="obsolete">ID služby je neplatné!</translation>
</message>
</context>
<context>
@ -5206,47 +5206,47 @@ Stále ještě jej chcete smazat?</translation>
</message>
<message>
<source>INPUT</source>
<translation>VSTUP</translation>
<translation type="obsolete">VSTUP</translation>
</message>
<message>
<source>OUTPUT</source>
<translation>VÝSTUP</translation>
<translation type="obsolete">VÝSTUP</translation>
</message>
<message>
<source>LABEL</source>
<translation>ŠTÍTEK</translation>
<translation type="obsolete">ŠTÍTEK</translation>
</message>
<message>
<source>SOURCE</source>
<translation>ZDROJ</translation>
<translation type="obsolete">ZDROJ</translation>
</message>
<message>
<source>MODE</source>
<translation>REŽIM</translation>
<translation type="obsolete">REŽIM</translation>
</message>
<message>
<source>ENGINE (Hex)</source>
<translation>STROJ (Hex)</translation>
<translation type="obsolete">STROJ (Hex)</translation>
</message>
<message>
<source>DEVICE (Hex)</source>
<translation>ZAŘÍZENÍ (Hex)</translation>
<translation type="obsolete">ZAŘÍZENÍ (Hex)</translation>
</message>
<message>
<source>PROVIDER ID</source>
<translation>ID POSKYTOVATELE</translation>
<translation type="obsolete">ID POSKYTOVATELE</translation>
</message>
<message>
<source>SERVICE ID</source>
<translation>ID SLUŽBY</translation>
<translation type="obsolete">ID SLUŽBY</translation>
</message>
<message>
<source>NODE</source>
<translation>UZEL</translation>
<translation type="obsolete">UZEL</translation>
</message>
<message>
<source>#</source>
<translation>#</translation>
<translation type="obsolete">#</translation>
</message>
<message>
<source>&amp;Edit</source>
@ -5254,43 +5254,47 @@ Stále ještě jej chcete smazat?</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>Z&amp;rušit</translation>
<translation type="obsolete">Z&amp;rušit</translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Vlevo</translation>
<translation type="obsolete">Vlevo</translation>
</message>
<message>
<source>Right</source>
<translation>Vpravo</translation>
<translation type="obsolete">Vpravo</translation>
</message>
<message>
<source>Input</source>
<translation>Vstup</translation>
<translation type="obsolete">Vstup</translation>
</message>
<message>
<source>Output</source>
<translation>Výstup</translation>
<translation type="obsolete">Výstup</translation>
</message>
<message>
<source>stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>left</source>
<translation>Vlevo</translation>
<translation type="obsolete">Vlevo</translation>
</message>
<message>
<source>right</source>
<translation>Vpravo</translation>
<translation type="obsolete">Vpravo</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Zavřít</translation>
</message>
</context>
<context>
@ -5865,7 +5869,11 @@ Stále ještě jej chcete smazat?</translation>
</message>
<message>
<source>&amp;Replicators:</source>
<translation type="unfinished">&amp;Zopakování:</translation>
<translation type="obsolete">&amp;Zopakování:</translation>
</message>
<message>
<source>Switcher/GPIO Devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>

View File

@ -1266,11 +1266,11 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEndpoint</name>
<message>
<source>Edit Input</source>
<translation>Eingang editieren</translation>
<translation type="unfinished">Eingang editieren</translation>
</message>
<message>
<source>Edit Output</source>
<translation>Ausgang editieren</translation>
<translation type="unfinished">Ausgang editieren</translation>
</message>
<message>
<source>Name: </source>
@ -1278,23 +1278,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Feed: </source>
<translation>Feed:</translation>
<translation type="obsolete">Feed:</translation>
</message>
<message>
<source>Mode: </source>
<translation>Modus:</translation>
<translation type="obsolete">Modus:</translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Links</translation>
<translation type="obsolete">Links</translation>
</message>
<message>
<source>Right</source>
<translation>Rechts</translation>
<translation type="obsolete">Rechts</translation>
</message>
<message>
<source>Engine (Hex): </source>
@ -1302,7 +1302,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Provider ID:</source>
<translation>Provider ID:</translation>
<translation type="obsolete">Provider ID:</translation>
</message>
<message>
<source>Device (Hex): </source>
@ -1310,7 +1310,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Service ID:</source>
<translation>Service ID:</translation>
<translation type="obsolete">Service ID:</translation>
</message>
<message>
<source>&amp;OK</source>
@ -1322,23 +1322,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Invalid Number</source>
<translation>Ungültige Nummer</translation>
<translation type="obsolete">Ungültige Nummer</translation>
</message>
<message>
<source>The Engine Number is Invalid!</source>
<translation>Die Engine-Nummer ist ungültig!</translation>
<translation type="obsolete">Die Engine-Nummer ist ungültig!</translation>
</message>
<message>
<source>The Provider ID is Invalid!</source>
<translation>Die Provider-ID ist ungültig!</translation>
<translation type="obsolete">Die Provider-ID ist ungültig!</translation>
</message>
<message>
<source>The Device Number is Invalid!</source>
<translation>Die Gerätenummer ist ungültig!</translation>
<translation type="obsolete">Die Gerätenummer ist ungültig!</translation>
</message>
<message>
<source>The Service ID is Invalid!</source>
<translation>Die Service-ID ist ungültig!</translation>
<translation type="obsolete">Die Service-ID ist ungültig!</translation>
</message>
</context>
<context>
@ -4884,47 +4884,47 @@ Wollen Sie ihn immernoch löschen?</translation>
</message>
<message>
<source>INPUT</source>
<translation>EINGANG</translation>
<translation type="obsolete">EINGANG</translation>
</message>
<message>
<source>OUTPUT</source>
<translation>AUSGANG</translation>
<translation type="obsolete">AUSGANG</translation>
</message>
<message>
<source>LABEL</source>
<translation>LABEL</translation>
<translation type="obsolete">LABEL</translation>
</message>
<message>
<source>SOURCE</source>
<translation>QUELLE</translation>
<translation type="obsolete">QUELLE</translation>
</message>
<message>
<source>MODE</source>
<translation>MODUS</translation>
<translation type="obsolete">MODUS</translation>
</message>
<message>
<source>ENGINE (Hex)</source>
<translation>ENGINE (Hex)</translation>
<translation type="obsolete">ENGINE (Hex)</translation>
</message>
<message>
<source>DEVICE (Hex)</source>
<translation>GERÄT (Hex)</translation>
<translation type="obsolete">GERÄT (Hex)</translation>
</message>
<message>
<source>PROVIDER ID</source>
<translation>PROVIDER ID</translation>
<translation type="obsolete">PROVIDER ID</translation>
</message>
<message>
<source>SERVICE ID</source>
<translation>SERVICE ID</translation>
<translation type="obsolete">SERVICE ID</translation>
</message>
<message>
<source>NODE</source>
<translation>NODE</translation>
<translation type="obsolete">NODE</translation>
</message>
<message>
<source>#</source>
<translation>#</translation>
<translation type="obsolete">#</translation>
</message>
<message>
<source>&amp;Edit</source>
@ -4932,43 +4932,47 @@ Wollen Sie ihn immernoch löschen?</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>Abbre&amp;chen</translation>
<translation type="obsolete">Abbre&amp;chen</translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Links</translation>
<translation type="obsolete">Links</translation>
</message>
<message>
<source>Right</source>
<translation>Rechts</translation>
<translation type="obsolete">Rechts</translation>
</message>
<message>
<source>Input</source>
<translation>Eingang</translation>
<translation type="obsolete">Eingang</translation>
</message>
<message>
<source>Output</source>
<translation>Ausgang</translation>
<translation type="obsolete">Ausgang</translation>
</message>
<message>
<source>stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>left</source>
<translation>Links</translation>
<translation type="obsolete">Links</translation>
</message>
<message>
<source>right</source>
<translation>Rechts</translation>
<translation type="obsolete">Rechts</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Schliessen</translation>
</message>
</context>
<context>
@ -5510,7 +5514,7 @@ Generieren</translation>
<translation type="obsolete">BroadcastTools SRC-16</translation>
</message>
<message>
<source>&amp;Replicators:</source>
<source>Switcher/GPIO Devices</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -1360,11 +1360,11 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEndpoint</name>
<message>
<source>Edit Input</source>
<translation>Editar Entrada</translation>
<translation type="unfinished">Editar Entrada</translation>
</message>
<message>
<source>Edit Output</source>
<translation>Editar Salida</translation>
<translation type="unfinished">Editar Salida</translation>
</message>
<message>
<source>Name: </source>
@ -1372,23 +1372,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Feed: </source>
<translation>Feed: </translation>
<translation type="obsolete">Feed: </translation>
</message>
<message>
<source>Mode: </source>
<translation>Modo: </translation>
<translation type="obsolete">Modo: </translation>
</message>
<message>
<source>Stereo</source>
<translation>Estéreo</translation>
<translation type="obsolete">Estéreo</translation>
</message>
<message>
<source>Left</source>
<translation>Izquierda</translation>
<translation type="obsolete">Izquierda</translation>
</message>
<message>
<source>Right</source>
<translation>Derecha</translation>
<translation type="obsolete">Derecha</translation>
</message>
<message>
<source>Engine (Hex): </source>
@ -1396,7 +1396,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Provider ID:</source>
<translation>ID Proveedor:</translation>
<translation type="obsolete">ID Proveedor:</translation>
</message>
<message>
<source>Device (Hex): </source>
@ -1404,7 +1404,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Service ID:</source>
<translation>ID del Servicio:</translation>
<translation type="obsolete">ID del Servicio:</translation>
</message>
<message>
<source>&amp;OK</source>
@ -1416,23 +1416,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Invalid Number</source>
<translation>Número inválido</translation>
<translation type="obsolete">Número inválido</translation>
</message>
<message>
<source>The Engine Number is Invalid!</source>
<translation>¡El número del motor es inválido!</translation>
<translation type="obsolete">¡El número del motor es inválido!</translation>
</message>
<message>
<source>The Provider ID is Invalid!</source>
<translation>¡El ID del proveedor es inválido!</translation>
<translation type="obsolete">¡El ID del proveedor es inválido!</translation>
</message>
<message>
<source>The Device Number is Invalid!</source>
<translation>¡El número del dispositivo es inválido!</translation>
<translation type="obsolete">¡El número del dispositivo es inválido!</translation>
</message>
<message>
<source>The Service ID is Invalid!</source>
<translation>¡El ID del servicio es inválido!</translation>
<translation type="obsolete">¡El ID del servicio es inválido!</translation>
</message>
</context>
<context>
@ -5157,39 +5157,39 @@ Do you still want to delete it?</source>
</message>
<message>
<source>INPUT</source>
<translation>ENTRADA</translation>
<translation type="obsolete">ENTRADA</translation>
</message>
<message>
<source>OUTPUT</source>
<translation>SALIDA</translation>
<translation type="obsolete">SALIDA</translation>
</message>
<message>
<source>LABEL</source>
<translation>ETIQ</translation>
<translation type="obsolete">ETIQ</translation>
</message>
<message>
<source>SOURCE</source>
<translation>FUENTE</translation>
<translation type="obsolete">FUENTE</translation>
</message>
<message>
<source>MODE</source>
<translation>MODO</translation>
<translation type="obsolete">MODO</translation>
</message>
<message>
<source>ENGINE (Hex)</source>
<translation>MOTOR (Hex)</translation>
<translation type="obsolete">MOTOR (Hex)</translation>
</message>
<message>
<source>DEVICE (Hex)</source>
<translation>DISPOSIT (Hex)</translation>
<translation type="obsolete">DISPOSIT (Hex)</translation>
</message>
<message>
<source>PROVIDER ID</source>
<translation>ID PROVEEDOR</translation>
<translation type="obsolete">ID PROVEEDOR</translation>
</message>
<message>
<source>SERVICE ID</source>
<translation>ID SERVICIO</translation>
<translation type="obsolete">ID SERVICIO</translation>
</message>
<message>
<source>&amp;Edit</source>
@ -5197,51 +5197,55 @@ Do you still want to delete it?</source>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;Aceptar</translation>
<translation type="obsolete">&amp;Aceptar</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
<message>
<source>Stereo</source>
<translation>Estéreo</translation>
<translation type="obsolete">Estéreo</translation>
</message>
<message>
<source>Left</source>
<translation>Izquierda</translation>
<translation type="obsolete">Izquierda</translation>
</message>
<message>
<source>Right</source>
<translation>Derecha</translation>
<translation type="obsolete">Derecha</translation>
</message>
<message>
<source>Input</source>
<translation>Entrada</translation>
<translation type="obsolete">Entrada</translation>
</message>
<message>
<source>Output</source>
<translation>Salida</translation>
<translation type="obsolete">Salida</translation>
</message>
<message>
<source>stereo</source>
<translation>estéreo</translation>
<translation type="obsolete">estéreo</translation>
</message>
<message>
<source>left</source>
<translation>izq</translation>
<translation type="obsolete">izq</translation>
</message>
<message>
<source>right</source>
<translation>der</translation>
<translation type="obsolete">der</translation>
</message>
<message>
<source>NODE</source>
<translation>NODO</translation>
<translation type="obsolete">NODO</translation>
</message>
<message>
<source>#</source>
<translation>#</translation>
<translation type="obsolete">#</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Cerrar</translation>
</message>
</context>
<context>
@ -5772,7 +5776,11 @@ Do you still want to delete it?</source>
</message>
<message>
<source>&amp;Replicators:</source>
<translation type="unfinished">&amp;Replicadores:</translation>
<translation type="obsolete">&amp;Replicadores:</translation>
</message>
<message>
<source>Switcher/GPIO Devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>

View File

@ -932,54 +932,18 @@ files, causing any whose files remain to be imported again.</source>
</context>
<context>
<name>EditEndpoint</name>
<message>
<source>Edit Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Feed: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mode: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine (Hex): </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Provider ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex): </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Service ID:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
@ -989,23 +953,11 @@ files, causing any whose files remain to be imported again.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invalid Number</source>
<source>Edit Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Engine Number is Invalid!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Provider ID is Invalid!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Device Number is Invalid!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Service ID is Invalid!</source>
<source>Edit Output</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -3957,92 +3909,12 @@ Permissions</source>
<source>List Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>INPUT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>OUTPUT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>LABEL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SOURCE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>MODE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ENGINE (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DEVICE (Hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>PROVIDER ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SERVICE ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NODE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>#</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>stereo</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>left</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>right</source>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -4451,10 +4323,6 @@ Permissions</source>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Replicators:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Are you sure you want to delete switcher</source>
<translation type="unfinished"></translation>
@ -4471,6 +4339,10 @@ Permissions</source>
<source>Deleting Switcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Switcher/GPIO Devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListPypads</name>

View File

@ -1228,11 +1228,11 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEndpoint</name>
<message>
<source>Edit Input</source>
<translation>Rediger inngang</translation>
<translation type="unfinished">Rediger inngang</translation>
</message>
<message>
<source>Edit Output</source>
<translation>Rediger utgang</translation>
<translation type="unfinished">Rediger utgang</translation>
</message>
<message>
<source>Name: </source>
@ -1240,23 +1240,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Feed: </source>
<translation>Straum:</translation>
<translation type="obsolete">Straum:</translation>
</message>
<message>
<source>Mode: </source>
<translation>Modus:</translation>
<translation type="obsolete">Modus:</translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Venstre</translation>
<translation type="obsolete">Venstre</translation>
</message>
<message>
<source>Right</source>
<translation>Høgre</translation>
<translation type="obsolete">Høgre</translation>
</message>
<message>
<source>Engine (Hex): </source>
@ -1264,7 +1264,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Provider ID:</source>
<translation>Tilbydar-ID:</translation>
<translation type="obsolete">Tilbydar-ID:</translation>
</message>
<message>
<source>Device (Hex): </source>
@ -1272,7 +1272,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Service ID:</source>
<translation>Tenest-ID:</translation>
<translation type="obsolete">Tenest-ID:</translation>
</message>
<message>
<source>&amp;OK</source>
@ -1284,23 +1284,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Invalid Number</source>
<translation>Ugyldig nummer</translation>
<translation type="obsolete">Ugyldig nummer</translation>
</message>
<message>
<source>The Engine Number is Invalid!</source>
<translation>Ugyldig nummer!</translation>
<translation type="obsolete">Ugyldig nummer!</translation>
</message>
<message>
<source>The Provider ID is Invalid!</source>
<translation>Tilbydar-ID-en er ugyldig!</translation>
<translation type="obsolete">Tilbydar-ID-en er ugyldig!</translation>
</message>
<message>
<source>The Device Number is Invalid!</source>
<translation>Einingsnummeret er ugyldig!</translation>
<translation type="obsolete">Einingsnummeret er ugyldig!</translation>
</message>
<message>
<source>The Service ID is Invalid!</source>
<translation>Tenest-ID-en er ugyldig!</translation>
<translation type="obsolete">Tenest-ID-en er ugyldig!</translation>
</message>
</context>
<context>
@ -4741,47 +4741,47 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
</message>
<message>
<source>INPUT</source>
<translation>INNGANG</translation>
<translation type="obsolete">INNGANG</translation>
</message>
<message>
<source>OUTPUT</source>
<translation>UTGANG</translation>
<translation type="obsolete">UTGANG</translation>
</message>
<message>
<source>LABEL</source>
<translation>MERKE</translation>
<translation type="obsolete">MERKE</translation>
</message>
<message>
<source>SOURCE</source>
<translation>KJELDE</translation>
<translation type="obsolete">KJELDE</translation>
</message>
<message>
<source>MODE</source>
<translation>MODUS</translation>
<translation type="obsolete">MODUS</translation>
</message>
<message>
<source>ENGINE (Hex)</source>
<translation>MASKIN (heksadesimal)</translation>
<translation type="obsolete">MASKIN (heksadesimal)</translation>
</message>
<message>
<source>DEVICE (Hex)</source>
<translation>EINING (heksadesimal)</translation>
<translation type="obsolete">EINING (heksadesimal)</translation>
</message>
<message>
<source>PROVIDER ID</source>
<translation>TILBYDAR-ID</translation>
<translation type="obsolete">TILBYDAR-ID</translation>
</message>
<message>
<source>SERVICE ID</source>
<translation>TENEST-ID</translation>
<translation type="obsolete">TENEST-ID</translation>
</message>
<message>
<source>NODE</source>
<translation>NODE</translation>
<translation type="obsolete">NODE</translation>
</message>
<message>
<source>#</source>
<translation>#</translation>
<translation type="obsolete">#</translation>
</message>
<message>
<source>&amp;Edit</source>
@ -4789,43 +4789,47 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Avbryt</translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Venstre</translation>
<translation type="obsolete">Venstre</translation>
</message>
<message>
<source>Right</source>
<translation>Høgre</translation>
<translation type="obsolete">Høgre</translation>
</message>
<message>
<source>Input</source>
<translation>Inngang</translation>
<translation type="obsolete">Inngang</translation>
</message>
<message>
<source>Output</source>
<translation>Utgang</translation>
<translation type="obsolete">Utgang</translation>
</message>
<message>
<source>stereo</source>
<translation>stereo</translation>
<translation type="obsolete">stereo</translation>
</message>
<message>
<source>left</source>
<translation>venstre</translation>
<translation type="obsolete">venstre</translation>
</message>
<message>
<source>right</source>
<translation>høgre</translation>
<translation type="obsolete">høgre</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
</context>
<context>
@ -5367,7 +5371,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="obsolete">BroadcastTools SS4.4</translation>
</message>
<message>
<source>&amp;Replicators:</source>
<source>Switcher/GPIO Devices</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -1228,11 +1228,11 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEndpoint</name>
<message>
<source>Edit Input</source>
<translation>Rediger inngang</translation>
<translation type="unfinished">Rediger inngang</translation>
</message>
<message>
<source>Edit Output</source>
<translation>Rediger utgang</translation>
<translation type="unfinished">Rediger utgang</translation>
</message>
<message>
<source>Name: </source>
@ -1240,23 +1240,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Feed: </source>
<translation>Straum:</translation>
<translation type="obsolete">Straum:</translation>
</message>
<message>
<source>Mode: </source>
<translation>Modus:</translation>
<translation type="obsolete">Modus:</translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Venstre</translation>
<translation type="obsolete">Venstre</translation>
</message>
<message>
<source>Right</source>
<translation>Høgre</translation>
<translation type="obsolete">Høgre</translation>
</message>
<message>
<source>Engine (Hex): </source>
@ -1264,7 +1264,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Provider ID:</source>
<translation>Tilbydar-ID:</translation>
<translation type="obsolete">Tilbydar-ID:</translation>
</message>
<message>
<source>Device (Hex): </source>
@ -1272,7 +1272,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Service ID:</source>
<translation>Tenest-ID:</translation>
<translation type="obsolete">Tenest-ID:</translation>
</message>
<message>
<source>&amp;OK</source>
@ -1284,23 +1284,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Invalid Number</source>
<translation>Ugyldig nummer</translation>
<translation type="obsolete">Ugyldig nummer</translation>
</message>
<message>
<source>The Engine Number is Invalid!</source>
<translation>Ugyldig nummer!</translation>
<translation type="obsolete">Ugyldig nummer!</translation>
</message>
<message>
<source>The Provider ID is Invalid!</source>
<translation>Tilbydar-ID-en er ugyldig!</translation>
<translation type="obsolete">Tilbydar-ID-en er ugyldig!</translation>
</message>
<message>
<source>The Device Number is Invalid!</source>
<translation>Einingsnummeret er ugyldig!</translation>
<translation type="obsolete">Einingsnummeret er ugyldig!</translation>
</message>
<message>
<source>The Service ID is Invalid!</source>
<translation>Tenest-ID-en er ugyldig!</translation>
<translation type="obsolete">Tenest-ID-en er ugyldig!</translation>
</message>
</context>
<context>
@ -4741,47 +4741,47 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
</message>
<message>
<source>INPUT</source>
<translation>INNGANG</translation>
<translation type="obsolete">INNGANG</translation>
</message>
<message>
<source>OUTPUT</source>
<translation>UTGANG</translation>
<translation type="obsolete">UTGANG</translation>
</message>
<message>
<source>LABEL</source>
<translation>MERKE</translation>
<translation type="obsolete">MERKE</translation>
</message>
<message>
<source>SOURCE</source>
<translation>KJELDE</translation>
<translation type="obsolete">KJELDE</translation>
</message>
<message>
<source>MODE</source>
<translation>MODUS</translation>
<translation type="obsolete">MODUS</translation>
</message>
<message>
<source>ENGINE (Hex)</source>
<translation>MASKIN (heksadesimal)</translation>
<translation type="obsolete">MASKIN (heksadesimal)</translation>
</message>
<message>
<source>DEVICE (Hex)</source>
<translation>EINING (heksadesimal)</translation>
<translation type="obsolete">EINING (heksadesimal)</translation>
</message>
<message>
<source>PROVIDER ID</source>
<translation>TILBYDAR-ID</translation>
<translation type="obsolete">TILBYDAR-ID</translation>
</message>
<message>
<source>SERVICE ID</source>
<translation>TENEST-ID</translation>
<translation type="obsolete">TENEST-ID</translation>
</message>
<message>
<source>NODE</source>
<translation>NODE</translation>
<translation type="obsolete">NODE</translation>
</message>
<message>
<source>#</source>
<translation>#</translation>
<translation type="obsolete">#</translation>
</message>
<message>
<source>&amp;Edit</source>
@ -4789,43 +4789,47 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Avbryt</translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
<message>
<source>Stereo</source>
<translation>Stereo</translation>
<translation type="obsolete">Stereo</translation>
</message>
<message>
<source>Left</source>
<translation>Venstre</translation>
<translation type="obsolete">Venstre</translation>
</message>
<message>
<source>Right</source>
<translation>Høgre</translation>
<translation type="obsolete">Høgre</translation>
</message>
<message>
<source>Input</source>
<translation>Inngang</translation>
<translation type="obsolete">Inngang</translation>
</message>
<message>
<source>Output</source>
<translation>Utgang</translation>
<translation type="obsolete">Utgang</translation>
</message>
<message>
<source>stereo</source>
<translation>stereo</translation>
<translation type="obsolete">stereo</translation>
</message>
<message>
<source>left</source>
<translation>venstre</translation>
<translation type="obsolete">venstre</translation>
</message>
<message>
<source>right</source>
<translation>høgre</translation>
<translation type="obsolete">høgre</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
</context>
<context>
@ -5367,7 +5371,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="obsolete">BroadcastTools SS4.4</translation>
</message>
<message>
<source>&amp;Replicators:</source>
<source>Switcher/GPIO Devices</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -1238,11 +1238,11 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEndpoint</name>
<message>
<source>Edit Input</source>
<translation>Editar Entrada</translation>
<translation type="unfinished">Editar Entrada</translation>
</message>
<message>
<source>Edit Output</source>
<translation>Editar Saída</translation>
<translation type="unfinished">Editar Saída</translation>
</message>
<message>
<source>Name: </source>
@ -1250,23 +1250,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Feed: </source>
<translation>Feed: </translation>
<translation type="obsolete">Feed: </translation>
</message>
<message>
<source>Mode: </source>
<translation>Modo:</translation>
<translation type="obsolete">Modo:</translation>
</message>
<message>
<source>Stereo</source>
<translation>Estéreo</translation>
<translation type="obsolete">Estéreo</translation>
</message>
<message>
<source>Left</source>
<translation>Esquerda </translation>
<translation type="obsolete">Esquerda </translation>
</message>
<message>
<source>Right</source>
<translation>Direita</translation>
<translation type="obsolete">Direita</translation>
</message>
<message>
<source>Engine (Hex): </source>
@ -1274,7 +1274,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Provider ID:</source>
<translation>Identificação do Provedor: </translation>
<translation type="obsolete">Identificação do Provedor: </translation>
</message>
<message>
<source>Device (Hex): </source>
@ -1282,7 +1282,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Service ID:</source>
<translation>Identificação do Serviço:</translation>
<translation type="obsolete">Identificação do Serviço:</translation>
</message>
<message>
<source>&amp;OK</source>
@ -1294,23 +1294,23 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Invalid Number</source>
<translation>Número Inválido</translation>
<translation type="obsolete">Número Inválido</translation>
</message>
<message>
<source>The Engine Number is Invalid!</source>
<translation>O Número do Mecanismo é inválido! </translation>
<translation type="obsolete">O Número do Mecanismo é inválido! </translation>
</message>
<message>
<source>The Provider ID is Invalid!</source>
<translation>A Identificação do Provedor é inválida! </translation>
<translation type="obsolete">A Identificação do Provedor é inválida! </translation>
</message>
<message>
<source>The Device Number is Invalid!</source>
<translation>O Número do Dispositivo é inválido! </translation>
<translation type="obsolete">O Número do Dispositivo é inválido! </translation>
</message>
<message>
<source>The Service ID is Invalid!</source>
<translation>A Identificação do Serviçor é inválida! </translation>
<translation type="obsolete">A Identificação do Serviçor é inválida! </translation>
</message>
</context>
<context>
@ -4864,47 +4864,47 @@ Você ainda quer Deletar?</translation>
</message>
<message>
<source>INPUT</source>
<translation>ENTRADA</translation>
<translation type="obsolete">ENTRADA</translation>
</message>
<message>
<source>OUTPUT</source>
<translation>SAÍDA</translation>
<translation type="obsolete">SAÍDA</translation>
</message>
<message>
<source>LABEL</source>
<translation>IDENTIFICAÇÃO</translation>
<translation type="obsolete">IDENTIFICAÇÃO</translation>
</message>
<message>
<source>SOURCE</source>
<translation>FONTE</translation>
<translation type="obsolete">FONTE</translation>
</message>
<message>
<source>MODE</source>
<translation>MODO</translation>
<translation type="obsolete">MODO</translation>
</message>
<message>
<source>ENGINE (Hex)</source>
<translation>MECANISMO (Hex)</translation>
<translation type="obsolete">MECANISMO (Hex)</translation>
</message>
<message>
<source>DEVICE (Hex)</source>
<translation>DISPOSITIVO (Hex)</translation>
<translation type="obsolete">DISPOSITIVO (Hex)</translation>
</message>
<message>
<source>PROVIDER ID</source>
<translation>PROVEDOR DE ID</translation>
<translation type="obsolete">PROVEDOR DE ID</translation>
</message>
<message>
<source>SERVICE ID</source>
<translation>ID DO SERVIÇO</translation>
<translation type="obsolete">ID DO SERVIÇO</translation>
</message>
<message>
<source>NODE</source>
<translation>NÓDULO</translation>
<translation type="obsolete">NÓDULO</translation>
</message>
<message>
<source>#</source>
<translation>#</translation>
<translation type="obsolete">#</translation>
</message>
<message>
<source>&amp;Edit</source>
@ -4912,43 +4912,47 @@ Você ainda quer Deletar?</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
<message>
<source>Stereo</source>
<translation>Estéreo</translation>
<translation type="obsolete">Estéreo</translation>
</message>
<message>
<source>Left</source>
<translation>Esquerda </translation>
<translation type="obsolete">Esquerda </translation>
</message>
<message>
<source>Right</source>
<translation>Direita</translation>
<translation type="obsolete">Direita</translation>
</message>
<message>
<source>Input</source>
<translation>Entrada</translation>
<translation type="obsolete">Entrada</translation>
</message>
<message>
<source>Output</source>
<translation>Saída</translation>
<translation type="obsolete">Saída</translation>
</message>
<message>
<source>stereo</source>
<translation>Estéreo</translation>
<translation type="obsolete">Estéreo</translation>
</message>
<message>
<source>left</source>
<translation>esquerda</translation>
<translation type="obsolete">esquerda</translation>
</message>
<message>
<source>right</source>
<translation>direita</translation>
<translation type="obsolete">direita</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Fechar</translation>
</message>
</context>
<context>
@ -5482,7 +5486,7 @@ Você ainda quer Deletar?</translation>
<translation type="obsolete">BroadcastTools SS4.4</translation>
</message>
<message>
<source>&amp;Replicators:</source>
<source>Switcher/GPIO Devices</source>
<translation type="unfinished"></translation>
</message>
</context>