Rivendellaudio/lib/rdhotkeylist.cpp
Fred Gleason 796e1bebc3 2018-08-07 Fred Gleason <fredg@paravelsystems.com>
* Removed the 'pam_rd' plug-in.
	* Removed rdchunk(1).
	* Upgraded Qt3 to Qt4.
2018-08-07 10:09:49 -04:00

136 lines
3.1 KiB
C++

// rdhotkeylist.cpp
//
// An Abstract of the rdhotkeylist
//
// (C) Copyright 2002-2004,2010,2016 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<vector>
#include <stdlib.h>
#include<rdhotkeylist.h>
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.find("//");
int eqsign = buf.find("=");
if ((eqsign != -1) && (acomment != 0) ) {
KeyString = buf.left((eqsign ));
KeyString = KeyString.mid(4); // Remove 'Key_'
int comma = buf.find(",");
if (comma != -1) {
KeyHex = buf.mid((eqsign + 1),
(comma - eqsign)-1 );
}
else {
int comment = buf.find("//");
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 cleanstring;
for (int i=0 ; i<sent.length(); i++) {
switch(((const char *)sent)[i]) {
case '\n':
break;
case '\t':
break;
case ' ':
break;
default:
cleanstring+=((const char *)sent)[i];
break;
}
}
return cleanstring;
}
QString RDHotKeyList::GetKeyCode(int number)
{
for (unsigned i = 0; i < hotkeylist.size(); i++) {
if ((hotkeylist.at(i).decvalue) == number){
return hotkeylist.at(i).stringvalue;
}
}
return (QString(""));
}