diff --git a/ChangeLog b/ChangeLog index 1cf004e2..713aed08 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22436,3 +22436,9 @@ 'RDAirPlayConf::setLogoPath()' methods. * Added a 'Logo Image' control to the 'Configure RDAirPlay' dialog in rdadmin(1). +2021-09-16 Fred Gleason + * Removed the vestigal 'Hot Keys' capability. + * Modified the 'Start on SpaceBar' action in rdairplay(1) so as to + activate upon *release* of the spacebar. + * Fixed a regression that broke the Alt-X keybinding in + rdairplay(1). diff --git a/docs/tables/DEAD.txt b/docs/tables/DEAD.txt index 51d53277..330ea7a5 100644 --- a/docs/tables/DEAD.txt +++ b/docs/tables/DEAD.txt @@ -1,6 +1,7 @@ -This note lists DB fields that are currently unused and may be removed +This note lists DB structures that are currently unused and may be removed in future. GROUPS.ENABLE_NOW_NEXT LOGS.INCLUDE_IMPORT_MARKERS SERVICES.INCLUDE_IMPORT_MARKERS +RDHOTKEYS diff --git a/lib/Makefile.am b/lib/Makefile.am index e098e8ed..9c3cd124 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -153,8 +153,6 @@ dist_librd_la_SOURCES = dbversion.h\ rdgrouplistmodel.cpp rdgrouplistmodel.h\ rdhash.cpp rdhash.h\ rdhostvarlistmodel.cpp rdhostvarlistmodel.h\ - rdhotkeys.cpp rdhotkeys.h\ - rdhotkeylist.cpp rdhotkeylist.h\ rdidvalidator.cpp rdidvalidator.h\ rdiconengine.cpp rdiconengine.h\ rdimagepickerbox.cpp rdimagepickerbox.h\ diff --git a/lib/rdhotkeylist.cpp b/lib/rdhotkeylist.cpp deleted file mode 100644 index d1fda0e8..00000000 --- a/lib/rdhotkeylist.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// rdhotkeylist.cpp -// -// An Abstract of the rdhotkeylist -// -// (C) Copyright 2002-2021 Fred Gleason -// -// 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 - -RDHotKeyList::RDHotKeyList( ) -{ - hotkeylist.resize(0); - BuildKeyList(); -} - -RDHotKeyList::~RDHotKeyList() -{ - hotkeylist.clear(); -} - -void RDHotKeyList::BuildKeyList( ) -{ - char qtpath[256]; - char keyfile[256]; - char line[256]; - FILE *hkeyfile; - - char enumstring[11] = "enum Key {"; - QString KeyString; - QString KeyHex; - QString Filestring; - keyList CurKey; - char *p = {0}; - - if(getenv("QTDIR")==NULL) { - return; - } - strcpy(qtpath, (const char *) getenv("QTDIR")); - strcpy(keyfile,qtpath); - strcat(keyfile,"/include/qnamespace.h"); - hkeyfile = fopen(keyfile,"r"); - if (hkeyfile==NULL) { - return; - } - if (fgets(line,256,hkeyfile) !=NULL) { - while ((p = strstr(line,enumstring))== NULL ) { - if (fgets(line,256,hkeyfile) == NULL) { - break; - } - } - if (p != NULL) { - while ( ( fgets(line,256,hkeyfile) != NULL) && (!(strstr(line,"}")) ) ) { - QString buf = cleanStrings(line); - int acomment = buf.indexOf("//"); - int eqsign = buf.indexOf("="); - if ((eqsign != -1) && (acomment != 0) ) { - KeyString = buf.left((eqsign )); - KeyString = KeyString.mid(4); // Remove 'Key_' - int comma = buf.indexOf(","); - if (comma != -1) { - KeyHex = buf.mid((eqsign + 1), - (comma - eqsign)-1 ); - } - else { - int comment = buf.indexOf("//"); - if (comment != -1) { - KeyHex = buf.mid( (eqsign+1), - (comment - eqsign) ); - } - else { - KeyHex = buf.mid( (eqsign+1), - (buf.length() - eqsign) ); - } - } - bool ok; - int hotkey_int = KeyHex.toInt(&ok,16); //Convert to decimal - if (ok) { - CurKey.decvalue = hotkey_int; - CurKey.stringvalue = KeyString; - hotkeylist.push_back(CurKey) ; - } - } - } - } - } - fclose(hkeyfile); -} - - -QString RDHotKeyList::cleanStrings( const QString sent) -{ - QString ret; - - for(int i=0;i -// -// 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. -// -// written by Todd Baker bakert@rfa.org - -#ifndef RDHOTKEYLIST_H -#define RDHOTKEYLIST_H - -#include -#include -#include - -struct keyList { - int decvalue ; - QString stringvalue; -}; - -class RDHotKeyList -{ - -public: - RDHotKeyList( ); - ~RDHotKeyList( ) ; - void BuildKeyList( ); - QString GetKeyCode(int); -private: - std::vector hotkeylist; - QString cleanStrings(const QString cleanstring); -}; - -#endif - diff --git a/lib/rdhotkeys.cpp b/lib/rdhotkeys.cpp deleted file mode 100644 index 1d748e5a..00000000 --- a/lib/rdhotkeys.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// rdhotkeys.cpp -// -// Abstract an RDHotKeys Configuration. -// -// (C) Copyright 2002-2021 Fred Gleason -// -// 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 "rdconf.h" -#include "rddb.h" -#include "rdescape_string.h" -#include "rdhotkeys.h" - -RDHotkeys::RDHotkeys(const QString &station,const QString &module) -{ - QString sql; - RDSqlQuery *q; - - station_hotkeys=station; - module_name=module; - - sql=QString("select `STATION_NAME` from `RDHOTKEYS` where ")+ - "`STATION_NAME`='"+RDEscapeString(station_hotkeys)+"' && "+ - "`MODULE_NAME`='"+RDEscapeString(module_name)+"'"; - q=new RDSqlQuery(sql); - if(!q->first()) { - InsertHotkeys(); - } - delete q; -} - - -QString RDHotkeys::station() const -{ - return station_hotkeys; -} - - -QString RDHotkeys::GetRowLabel(const QString &station,const QString &module,const QString &value) const -{ - RDSqlQuery *q; - QString sql; - QString hotkey_label; - - sql=QString::asprintf("select `KEY_LABEL` from `RDHOTKEYS` where ")+ - "`STATION_NAME`='"+RDEscapeString(station)+"' && "+ - "`MODULE_NAME`='"+RDEscapeString(module)+"' && "+ - "`KEY_VALUE`='"+RDEscapeString(value)+"'"; - q=new RDSqlQuery(sql); - if(!q->first()) { - hotkey_label=QString(""); - } - else { - hotkey_label=q->value(0).toString(); - } - delete q; - return hotkey_label; -} - - -void RDHotkeys::InsertHotkeys() const -{ - QString sql; - QStringList labels; - - labels.push_back(QObject::tr("Start Line 1")); - labels.push_back(QObject::tr("Stop Line 1")); - labels.push_back(QObject::tr("Pause Line 1")); - labels.push_back(QObject::tr("Start Line 2")); - labels.push_back(QObject::tr("Stop Line 2")); - labels.push_back(QObject::tr("Pause Line 2")); - labels.push_back(QObject::tr("Start Line 3")); - labels.push_back(QObject::tr("Stop Line 3")); - labels.push_back(QObject::tr("Pause Line 3")); - labels.push_back(QObject::tr("Start Line 4")); - labels.push_back(QObject::tr("Stop Line 4")); - labels.push_back(QObject::tr("Pause Line 4")); - labels.push_back(QObject::tr("Start Line 5")); - labels.push_back(QObject::tr("Stop Line 5")); - labels.push_back(QObject::tr("Pause Line 5")); - labels.push_back(QObject::tr("Start Line 6")); - labels.push_back(QObject::tr("Stop Line 6")); - labels.push_back(QObject::tr("Pause Line 6")); - labels.push_back(QObject::tr("Start Line 7")); - labels.push_back(QObject::tr("Stop Line 7")); - labels.push_back(QObject::tr("Pause Line 7")); - labels.push_back(QObject::tr("Add")); - labels.push_back(QObject::tr("Delete")); - labels.push_back(QObject::tr("Copy")); - labels.push_back(QObject::tr("Move")); - labels.push_back(QObject::tr("Sound Panel")); - labels.push_back(QObject::tr("Main Log")); - labels.push_back(QObject::tr("Aux Log 1")); - labels.push_back(QObject::tr("Aux Log 2")); - - for(int i=0;i -// -// 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 RDHOTKEYS_H -#define RDHOTKEYS_H - -#include - -class RDHotkeys -{ - public: - RDHotkeys(const QString &station,const QString &module); - QString station() const; - int inputCard() const; - QString GetRowLabel(const QString &station,const QString &value,const QString &module) const; - - private: - void InsertHotkeys() const; - QString station_hotkeys; - QString module_name; -}; - - -#endif // RDHOTKEYS_H diff --git a/rdairplay/rdairplay.cpp b/rdairplay/rdairplay.cpp index af87984b..54fd60ca 100644 --- a/rdairplay/rdairplay.cpp +++ b/rdairplay/rdairplay.cpp @@ -727,14 +727,6 @@ MainWidget::MainWidget(RDConfig *config,QWidget *parent) } } - // - // Create the HotKeyList object - // - air_keylist=new RDHotKeyList(); - air_hotkeys=new RDHotkeys(rda->config()->stationName(),"rdairplay"); - AltKeyHit=false; - CtrlKeyHit=false; - // // Set Signal Handlers // @@ -1790,50 +1782,8 @@ void MainWidget::transportChangedData() } -void MainWidget::keyPressEvent(QKeyEvent *e) -{ - switch(e->key()) { - case Qt::Key_Space: - if(rda->airplayConf()->barAction()&&(air_log[0]->nextLine()>=0)) { - air_log[0]->play(air_log[0]->nextLine(),RDLogLine::StartManual); - } - break; - - case Qt::Key_X: - if(((e->modifiers()&Qt::AltModifier)!=0)&& - ((e->modifiers()&Qt::ShiftModifier)==0)&& - ((e->modifiers()&Qt::ControlModifier)==0)) { - QCloseEvent *ce=new QCloseEvent(); - closeEvent(ce); - delete ce; - } - break; - - case Qt::Key_Alt: - keystrokecount++; - AltKeyHit = true; - break; - - case Qt::Key_Control: - keystrokecount++; - CtrlKeyHit = true; - break; - - default: - QWidget::keyPressEvent(e); - break; - } -} - - void MainWidget::keyReleaseEvent(QKeyEvent *e) { - int keyhit = e->key(); - QString mystring=(*air_keylist).GetKeyCode(keyhit); - QString hotkeystrokes; - QString hot_label; - QString temp_string; - switch(e->key()) { case Qt::Key_Space: switch(air_bar_action) { @@ -1848,131 +1798,16 @@ void MainWidget::keyReleaseEvent(QKeyEvent *e) break; } break; - } -// Try to figure out if this is a hot key combination - if ( (e->key() == Qt::Key_Shift) || - (e->key() == Qt::Key_Up) || - (e->key() == Qt::Key_Left) || - (e->key() == Qt::Key_Right) || - (e->key() == Qt::Key_Down) ) { - QWidget::keyReleaseEvent(e); - keystrokecount = 0; - hotkeystrokes = QString (""); - return; - } - if ((e->key() == Qt::Key_Alt) || - (e->key() == Qt::Key_Control)) { - if (keystrokecount != 0 ) hotkeystrokes = QString (""); - if (AltKeyHit) { - AltKeyHit = false; - if (keystrokecount > 0) keystrokecount--; - } - if (CtrlKeyHit) { - CtrlKeyHit = false; - if (keystrokecount > 0) keystrokecount--; - } - return; - } - - if (!e->isAutoRepeat()) { - if (keystrokecount == 0) - hotkeystrokes = QString (""); - if (AltKeyHit) { - hotkeystrokes = (*air_keylist).GetKeyCode(Qt::Key_Alt); - hotkeystrokes += QString(" + "); - } - if (CtrlKeyHit) { - if (AltKeyHit) { - hotkeystrokes += (*air_keylist).GetKeyCode(Qt::Key_Control); - hotkeystrokes += QString (" + "); - } - else { - hotkeystrokes = (*air_keylist).GetKeyCode(Qt::Key_Control); - hotkeystrokes += QString (" + "); - } - } - - hotkeystrokes += mystring; - keystrokecount = 0 ; - } - - // Have any Hot Key Combinations now... - - if (hotkeystrokes.length() > 0) { - - hot_label=(*air_hotkeys).GetRowLabel(RDEscapeString(rda->config()->stationName()), - "airplay",hotkeystrokes.toUtf8().constData()); - - if (hot_label.length()>0) { - - // "we found a keystroke label - - if (hot_label=="Add") - { - addButtonData(); - return; - } - - if (hot_label=="Delete") - { - deleteButtonData(); - return; - } - - if (hot_label=="Copy") - { - copyButtonData(); - return; - } - - if (hot_label=="Move") - { - moveButtonData(); - return; - } - - if (hot_label=="Sound Panel") - { - panelButtonData(); - return; - } - - if (hot_label=="Main Log") - { - fullLogButtonData(0); - return; - } - - if ((hot_label=="Aux Log 1") && - (rda->airplayConf()->showAuxButton(0) ) ) - { - fullLogButtonData(1); - return; - } - - if ((hot_label=="Aux Log 2") && - (rda->airplayConf()->showAuxButton(1) ) ) - { - fullLogButtonData(2); - return; - } - - for (int i = 1; i < 8 ; i++) - { - temp_string = QString::asprintf("Start Line %d",i); - if (hot_label==temp_string) - air_button_list->startButton(i-1); - - temp_string = QString::asprintf("Stop Line %d",i); - if (hot_label==temp_string) - air_button_list->stopButtonHotkey(i-1); - - temp_string = QString::asprintf("Pause Line %d",i); - if (hot_label==temp_string) - air_button_list->pauseButtonHotkey(i-1); - } - } + case Qt::Key_X: + if(((e->modifiers()&Qt::AltModifier)!=0)&& + ((e->modifiers()&Qt::ShiftModifier)==0)&& + ((e->modifiers()&Qt::ControlModifier)==0)) { + QCloseEvent *ce=new QCloseEvent(); + closeEvent(ce); + delete ce; + } + break; } QWidget::keyReleaseEvent(e); } diff --git a/rdairplay/rdairplay.h b/rdairplay/rdairplay.h index e70c1f25..84c889c9 100644 --- a/rdairplay/rdairplay.h +++ b/rdairplay/rdairplay.h @@ -22,8 +22,6 @@ #define RDAIRPLAY_H #include -#include -#include #include #include #include @@ -86,7 +84,6 @@ class MainWidget : public RDMainWindow void transportChangedData(); protected: - void keyPressEvent(QKeyEvent *e); void keyReleaseEvent(QKeyEvent *e); void closeEvent(QCloseEvent *); void resizeEvent(QResizeEvent *e); @@ -158,9 +155,6 @@ class MainWidget : public RDMainWindow QDateTime air_startup_datetime; QPixmap *air_refresh_pixmap; QString air_editor_cmd; - int keystrokecount; - bool AltKeyHit ; - bool CtrlKeyHit; QFont air_message_fonts[AIR_MESSAGE_FONT_QUANTITY]; QFontMetrics *air_message_metrics[AIR_MESSAGE_FONT_QUANTITY]; int air_audio_channels[RDAirPlayConf::LastChannel]; @@ -177,8 +171,6 @@ class MainWidget : public RDMainWindow RDEmptyCart *air_empty_cart; RDCartDialog *air_cart_dialog; RDEventPlayer *air_event_player; - RDHotKeyList *air_keylist; - RDHotkeys *air_hotkeys; TopStrip *air_top_strip; QLabel *air_bug_label; };