1
0
mirror of https://github.com/ElvishArtisan/rivendell.git synced 2025-10-08 23:53:33 +02:00
Files
apis
cae
conf
docs
helpers
icons
importers
ios
lib
rdadmin
Makefile.am
add_feed.cpp
add_feed.h
add_group.cpp
add_group.h
add_hostvar.cpp
add_hostvar.h
add_matrix.cpp
add_matrix.h
add_replicator.cpp
add_replicator.h
add_report.cpp
add_report.h
add_schedcodes.cpp
add_schedcodes.h
add_station.cpp
add_station.h
add_svc.cpp
add_svc.h
add_user.cpp
add_user.h
autofill_carts.cpp
autofill_carts.h
edit_audios.cpp
edit_audios.h
edit_cartslots.cpp
edit_cartslots.h
edit_channelgpios.cpp
edit_channelgpios.h
edit_decks.cpp
edit_decks.h
edit_dropbox.cpp
edit_dropbox.h
edit_endpoint.cpp
edit_endpoint.h
edit_feed.cpp
edit_feed.h
edit_feed_perms.cpp
edit_feed_perms.h
edit_gpi.cpp
edit_gpi.h
edit_group.cpp
edit_group.h
edit_hostvar.cpp
edit_hostvar.h
edit_hotkeys.cpp
edit_hotkeys.h
edit_jack.cpp
edit_jack.h
edit_jack_client.cpp
edit_jack_client.h
edit_livewiregpio.cpp
edit_livewiregpio.h
edit_matrix.cpp
edit_matrix.h
edit_node.cpp
edit_node.h
edit_pypad.cpp
edit_pypad.h
edit_rdairplay.cpp
edit_rdairplay.h
edit_rdlibrary.cpp
edit_rdlibrary.h
edit_rdlogedit.cpp
edit_rdlogedit.h
edit_rdpanel.cpp
edit_rdpanel.h
edit_replicator.cpp
edit_replicator.h
edit_report.cpp
edit_report.h
edit_sas_resource.cpp
edit_sas_resource.h
edit_schedcodes.cpp
edit_schedcodes.h
edit_settings.cpp
edit_settings.h
edit_station.cpp
edit_station.h
edit_svc.cpp
edit_svc.h
edit_svc_perms.cpp
edit_svc_perms.h
edit_ttys.cpp
edit_ttys.h
edit_user.cpp
edit_user.h
edit_user_perms.cpp
edit_user_perms.h
edit_user_service_perms.cpp
edit_user_service_perms.h
edit_vguest_resource.cpp
edit_vguest_resource.h
globals.h
gpl2.html
help_audios.cpp
help_audios.h
importfields.cpp
importfields.h
info_banner1.xpm
info_banner2.xpm
info_dialog.cpp
info_dialog.h
license.cpp
license.h
list_dropboxes.cpp
list_dropboxes.h
list_endpoints.cpp
list_endpoints.h
list_feeds.cpp
list_feeds.h
list_gpis.cpp
list_gpis.h
list_groups.cpp
list_groups.h
list_hostvars.cpp
list_hostvars.h
list_livewiregpios.cpp
list_livewiregpios.h
list_matrices.cpp
list_matrices.h
list_nodes.cpp
list_nodes.h
list_pypads.cpp
list_pypads.h
list_replicator_carts.cpp
list_replicator_carts.h
list_replicators.cpp
list_replicators.h
list_reports.cpp
list_reports.h
list_sas_resources.cpp
list_sas_resources.h
list_schedcodes.cpp
list_schedcodes.h
list_stations.cpp
list_stations.h
list_svcs.cpp
list_svcs.h
list_users.cpp
list_users.h
list_vguest_resources.cpp
list_vguest_resources.h
login.cpp
login.h
rdadmin.cpp
rdadmin.h
rdadmin.pro
rdadmin_cs.ts
rdadmin_de.ts
rdadmin_es.ts
rdadmin_fr.ts
rdadmin_nb.ts
rdadmin_nn.ts
rdadmin_pt_BR.ts
rename_group.cpp
rename_group.h
test_import.cpp
test_import.h
view_adapters.cpp
view_adapters.h
view_node_info.cpp
view_node_info.h
view_pypad_errors.cpp
view_pypad_errors.h
xpm_info_banner1.cpp
xpm_info_banner2.cpp
rdairplay
rdcartslots
rdcastmanager
rdcatch
rdcatchd
rdhpi
rdlibrary
rdlogedit
rdlogin
rdlogmanager
rdmonitor
rdpadd
rdpadengined
rdpanel
rdrepld
rdselect
rdservice
rdvairplayd
ripcd
scripts
systemd
tests
utils
web
xdg
.gitignore
AUTHORS
CODINGSTYLE
COPYING
ChangeLog
INSTALL
INSTALL-WINDOWS
Makefile.am
NEWS
PACKAGE_VERSION
README
UPGRADING
acinclude.m4
autogen.sh
configure.ac
get_distro.pl
get_target.sh
rivendell.ism
rivendell.pro
rivendell.spec.in
Rivendellaudio/rdadmin/list_sas_resources.cpp
Fred Gleason f18dacf408 2019-10-01 Fred Gleason <fredg@paravelsystems.com>
* Added an 'RDDialog' class.
	* Added an 'RDWidget' class.
	* Refactored rdadmin(1) to use 'RDDialog' and 'RDWidget' base
	classes.
2019-10-01 11:17:23 -04:00

311 lines
8.4 KiB
C++

// list_sas_resources.cpp
//
// List SAS Resources.
//
// (C) Copyright 2002-2019 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 <rd.h>
#include <rddb.h>
#include <rdescape_string.h>
#include "edit_sas_resource.h"
#include "edit_user.h"
#include "list_sas_resources.h"
ListSasResources::ListSasResources(RDMatrix *matrix,int size,QWidget *parent)
: RDDialog(parent)
{
setModal(true);
QString sql;
QString str;
list_matrix=matrix;
list_size=size;
setWindowTitle("RDAdmin - "+tr("SAS Switches"));
//
// Fix the Window Size
//
setMinimumSize(sizeHint());
//
// Resources List Box
//
list_list_view=new Q3ListView(this);
list_title_label=
new QLabel(list_list_view,tr("SAS Switches"),this);
list_title_label->setFont(labelFont());
list_list_view->setAllColumnsShowFocus(true);
list_list_view->setItemMargin(5);
list_list_view->addColumn(tr("GPIO Line"));
list_list_view->setColumnAlignment(0,Qt::AlignHCenter);
list_list_view->addColumn(tr("Console"));
list_list_view->setColumnAlignment(1,Qt::AlignHCenter);
list_list_view->addColumn(tr("Source"));
list_list_view->setColumnAlignment(2,Qt::AlignHCenter);
list_list_view->addColumn(tr("Opto/Relay"));
list_list_view->setColumnAlignment(3,Qt::AlignHCenter);
connect(list_list_view,
SIGNAL(doubleClicked(Q3ListViewItem *,const QPoint &,int)),
this,
SLOT(doubleClickedData(Q3ListViewItem *,const QPoint &,int)));
//
// Edit Button
//
list_edit_button=new QPushButton(this);
list_edit_button->setFont(buttonFont());
list_edit_button->setText(tr("&Edit"));
connect(list_edit_button,SIGNAL(clicked()),this,SLOT(editData()));
//
// 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
//
RefreshList();
}
QSize ListSasResources::sizeHint() const
{
return QSize(400,250);
}
QSizePolicy ListSasResources::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void ListSasResources::editData()
{
int engine_num=-1;
int device_num=-1;
int relay_num=-1;
Q3ListViewItem *item=list_list_view->selectedItem();
if(item==NULL) {
return;
}
if(!item->text(1).isEmpty()) {
engine_num=item->text(1).toInt();
}
if(!item->text(2).isEmpty()) {
device_num=item->text(2).toInt();
}
if(!item->text(3).isEmpty()) {
relay_num=item->text(3).toInt();
}
EditSasResource *dialog=
new EditSasResource(&engine_num,&device_num,&relay_num,this);
if(dialog->exec()==0) {
if(engine_num>=0) {
item->setText(1,QString().sprintf("%d",engine_num));
}
else {
item->setText(1,"");
}
if(device_num>=0) {
item->setText(2,QString().sprintf("%d",device_num));
}
else {
item->setText(2,"");
}
if(relay_num>=0) {
item->setText(3,QString().sprintf("%d",relay_num));
}
else {
item->setText(3,"");
}
}
delete dialog;
}
void ListSasResources::doubleClickedData(Q3ListViewItem *item,
const QPoint &pt,int col)
{
editData();
}
void ListSasResources::okData()
{
QString sql;
RDSqlQuery *q;
int engine_num=-1;
int device_num=-1;
int surface_num=-1;
int relay_num=-1;
Q3ListViewItem *item=list_list_view->firstChild();
while(item!=NULL) {
engine_num=-1;
device_num=-1;
surface_num=-1;
relay_num=-1;
if(!item->text(1).isEmpty()) {
engine_num=item->text(1).toInt();
}
if(!item->text(2).isEmpty()) {
device_num=item->text(2).toInt();
}
if(!item->text(3).isEmpty()) {
relay_num=item->text(3).toInt();
}
sql=QString("select ID from VGUEST_RESOURCES where" )+
"(STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\")&&"+
QString().sprintf("(MATRIX_NUM=%d)&&",list_matrix->matrix())+
QString().sprintf("(NUMBER=%d)",item->text(0).toInt());
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString("update VGUEST_RESOURCES set ")+
QString().sprintf("ENGINE_NUM=%d,",engine_num)+
QString().sprintf("DEVICE_NUM=%d,",device_num)+
QString().sprintf("SURFACE_NUM=%d,",surface_num)+
QString().sprintf("RELAY_NUM=%d where ",relay_num)+
"(STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\")&&"+
QString().sprintf("(MATRIX_NUM=%d)&&",list_matrix->matrix())+
QString().sprintf("(NUMBER=%d)",item->text(0).toInt());
}
else {
sql=QString("insert into VGUEST_RESOURCES set ")+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\","+
QString().sprintf("MATRIX_NUM=%d,",list_matrix->matrix())+
QString().sprintf("NUMBER=%d,",item->text(0).toInt())+
QString().sprintf("ENGINE_NUM=%d,",engine_num)+
QString().sprintf("DEVICE_NUM=%d,",device_num)+
QString().sprintf("SURFACE_NUM=%d,",surface_num)+
QString().sprintf("RELAY_NUM=%d",relay_num);
}
q=new RDSqlQuery(sql);
delete q;
item=item->nextSibling();
}
done(0);
}
void ListSasResources::cancelData()
{
done(-1);
}
void ListSasResources::resizeEvent(QResizeEvent *e)
{
list_list_view->setGeometry(10,24,size().width()-20,size().height()-94);
list_title_label->setGeometry(14,5,85,19);
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);
}
void ListSasResources::RefreshList()
{
QString sql;
RDSqlQuery *q;
RDSqlQuery *q1;
Q3ListViewItem *item;
int n=1;
int gpis;
//
// Populate Resource Records
//
sql=QString("select GPIS from MATRICES where ")+
"(STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\")&&"+
QString().sprintf("(MATRIX=%d)",list_matrix->matrix());
q=new RDSqlQuery(sql);
if(!q->first()) {
delete q;
return;
}
gpis=q->value(0).toInt();
delete q;
for(int i=0;i<gpis;i++) {
sql=QString("select NUMBER from VGUEST_RESOURCES where ")+
"(STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\")&&"+
QString().sprintf("(MATRIX_NUM=%d)&&",list_matrix->matrix())+
QString().sprintf("(NUMBER=%d)",i+1);
q=new RDSqlQuery(sql);
if(!q->first()) {
sql=QString("insert into VGUEST_RESOURCES set ")+
QString().sprintf("NUMBER=%d,",i+1)+
"STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\","+
QString().sprintf("MATRIX_NUM=%d",list_matrix->matrix());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
}
sql=QString("select ")+
"NUMBER,"+
"ENGINE_NUM,"+
"DEVICE_NUM,"+
"RELAY_NUM "+
"from VGUEST_RESOURCES where "+
"(STATION_NAME=\""+RDEscapeString(list_matrix->station())+"\")&&"+
QString().sprintf("(MATRIX_NUM=%d)",list_matrix->matrix())+
"order by NUMBER";
q=new RDSqlQuery(sql);
list_list_view->clear();
while(q->next()) {
while(q->value(0).toInt()>n) {
item=new Q3ListViewItem(list_list_view);
item->setText(0,QString().sprintf("%03d",n++));
}
item=new Q3ListViewItem(list_list_view);
item->setText(0,QString().sprintf("%03d",q->value(0).toInt()));
if(q->value(1).toInt()>=0) {
item->setText(1,QString().sprintf("%d",q->value(1).toInt()));
}
if(q->value(2).toInt()>=0) {
item->setText(2,QString().sprintf("%d",q->value(2).toInt()));
}
if(q->value(3).toInt()>=0) {
item->setText(3,QString().sprintf("%d",q->value(3).toInt()));
}
n++;
}
for(int i=n;i<(list_size+1);i++) {
item=new Q3ListViewItem(list_list_view);
item->setText(0,QString().sprintf("%03d",i));
}
delete q;
}