Qt4 - Windows registry manipulation. Create the good HKEY where there should be,...
authorJean-Baptiste Kempf <jb@videolan.org>
Fri, 25 Jan 2008 00:48:32 +0000 (00:48 +0000)
committerJean-Baptiste Kempf <jb@videolan.org>
Fri, 25 Jan 2008 00:48:32 +0000 (00:48 +0000)
modules/gui/qt4/components/simple_preferences.cpp
modules/gui/qt4/util/registry.cpp
modules/gui/qt4/util/registry.hpp

index 7e7f48b..fbf3412 100644 (file)
@@ -638,6 +638,7 @@ void SPrefsPanel::lastfm_Changed( int i_state )
 
 void SPrefsPanel::assoDialog()
 {
+
     QDialog *d = new QDialog( this );
     QGridLayout *assoLayout = new QGridLayout( d );
 
@@ -665,17 +666,46 @@ void SPrefsPanel::assoDialog()
     CONNECT( clearButton, clicked(), d, reject() );
     d->exec();
     delete d;
+    listAsso.clear();
 }
 
 void addAsso( QVLCRegistry *qvReg, char *psz_ext )
 {
-    char psz_VLC[] = "VLC";
+    std::string s_path( "VLC" ); s_path += psz_ext;
+    std::string s_path2 = s_path;
 
+    /* Save a backup if already assigned */
     char *psz_value = qvReg->ReadRegistryString( psz_ext, "", ""  );
-    if( strlen( psz_value ) > 0 )
+    
+    if( psz_value && strlen( psz_value ) > 0 )
         qvReg->WriteRegistryString( psz_ext, "VLC.backup", psz_value );
+    delete psz_value;
+        
+    /* Put a "link" to VLC.EXT as default */
+    qvReg->WriteRegistryString( psz_ext, "", s_path.c_str() );
+    
+    /* Create the needed Key if they weren't done in the installer */
+    if( !qvReg->RegistryKeyExists( s_path.c_str() ) )
+    {
+        qvReg->WriteRegistryString( psz_ext, "", s_path.c_str() );
+        qvReg->WriteRegistryString( s_path.c_str(), "", "Media file" );
+        qvReg->WriteRegistryString( s_path.append( "\\shell" ).c_str() , "", "Play" );
+
+        /* Get the installer path */
+        QVLCRegistry *qvReg2 = new QVLCRegistry( HKEY_LOCAL_MACHINE );
+        std::string str_temp; str_temp.assign( 
+            qvReg2->ReadRegistryString( "Software\\VideoLAN\\VLC", "", "" ) );
+        
+        if( str_temp.size() )
+        {
+            qvReg->WriteRegistryString( s_path.append( "\\Play\\command" ).c_str(),
+                "", str_temp.append(" --started-from-file \"%1\"" ).c_str() );
 
-    qvReg->WriteRegistryString( psz_ext, "", strcat( psz_VLC, psz_ext ) );
+            qvReg->WriteRegistryString( s_path2.append( "\\DefaultIcon" ).c_str(), 
+                        "", str_temp.append(",0").c_str() );
+        }
+        delete qvReg2;
+    }
 }
 
 void delAsso( QVLCRegistry *qvReg, char *psz_ext )
@@ -683,18 +713,24 @@ void delAsso( QVLCRegistry *qvReg, char *psz_ext )
     char psz_VLC[] = "VLC";
     char *psz_value = qvReg->ReadRegistryString( psz_ext, "", ""  );
 
-    if( !strcmp( strcat( psz_VLC, psz_ext ), psz_value ) )
+    if( psz_value && !strcmp( strcat( psz_VLC, psz_ext ), psz_value ) )
     {
-        qvReg->WriteRegistryString( psz_ext, "",
-            qvReg->ReadRegistryString( psz_ext, "VLC.backup", "" ) );
-        // qvReg->DeletKey( psz_ext, "VLC.backup" );
+        free( psz_value );
+        psz_value = qvReg->ReadRegistryString( psz_ext, "VLC.backup", "" );
+        if( psz_value )
+            qvReg->WriteRegistryString( psz_ext, "", psz_value );
+
+        //qvReg->DeletKey( psz_ext, "VLC.backup" );
+        
     }
+    delete( psz_value );
 }
 void SPrefsPanel::saveAsso()
 {
     for( int i = 0; i < listAsso.size(); i ++ )
     {
         QVLCRegistry * qvReg = new QVLCRegistry( HKEY_CLASSES_ROOT );
+        
         if( listAsso[i]->checkState() > 0 )
         {
             addAsso( qvReg, qtu( listAsso[i]->text() ) );
index a6b0d66..717170a 100644 (file)
@@ -38,7 +38,7 @@ QVLCRegistry::~QVLCRegistry( void )
 {
 }
 
-bool QVLCRegistry::RegistryKeyExists( char *path )
+bool QVLCRegistry::RegistryKeyExists( const char *path )
 {
     HKEY keyHandle;
     if(  RegOpenKeyEx( m_RootKey, path, 0, KEY_READ, &keyHandle ) == ERROR_SUCCESS )
@@ -49,7 +49,7 @@ bool QVLCRegistry::RegistryKeyExists( char *path )
     return false;
 }
 
-bool QVLCRegistry::RegistryValueExists( char *path, char *valueName )
+bool QVLCRegistry::RegistryValueExists( const char *path, const char *valueName )
 {
     HKEY keyHandle;
     bool temp = false;
@@ -68,7 +68,7 @@ bool QVLCRegistry::RegistryValueExists( char *path, char *valueName )
     return temp;
 }
 
-void QVLCRegistry::WriteRegistryInt( char *path, char *valueName, int value )
+void QVLCRegistry::WriteRegistryInt( const char *path, const char *valueName, int value )
 {
     HKEY keyHandle;
 
@@ -81,7 +81,7 @@ void QVLCRegistry::WriteRegistryInt( char *path, char *valueName, int value )
     }
 }
 
-void QVLCRegistry::WriteRegistryString( char *path, char *valueName, char *value )
+void QVLCRegistry::WriteRegistryString( const char *path, const char *valueName, const char *value )
 {
     HKEY keyHandle;
 
@@ -94,7 +94,7 @@ void QVLCRegistry::WriteRegistryString( char *path, char *valueName, char *value
     }
 }
 
-void QVLCRegistry::WriteRegistryDouble( char *path, char *valueName, double value )
+void QVLCRegistry::WriteRegistryDouble( const char *path, const char *valueName, double value )
 {
     HKEY keyHandle;
     if( RegCreateKeyEx( m_RootKey, path, 0, NULL, REG_OPTION_NON_VOLATILE,
@@ -105,7 +105,7 @@ void QVLCRegistry::WriteRegistryDouble( char *path, char *valueName, double valu
     }
 }
 
-int QVLCRegistry::ReadRegistryInt( char *path, char *valueName, int default_value ) {
+int QVLCRegistry::ReadRegistryInt( const char *path, const char *valueName, int default_value ) {
     HKEY keyHandle;
     int tempValue;
     DWORD size1;
@@ -128,7 +128,7 @@ int QVLCRegistry::ReadRegistryInt( char *path, char *valueName, int default_valu
     return default_value;
 }
 
-char * QVLCRegistry::ReadRegistryString( char *path, char *valueName, char *default_value )
+char * QVLCRegistry::ReadRegistryString( const char *path, const char *valueName, char *default_value )
 {
     HKEY keyHandle;
     char *tempValue = NULL;
@@ -161,7 +161,7 @@ char * QVLCRegistry::ReadRegistryString( char *path, char *valueName, char *defa
     return default_value;
 }
 
-double QVLCRegistry::ReadRegistryDouble( char *path, char *valueName, double default_value )
+double QVLCRegistry::ReadRegistryDouble( const char *path, const char *valueName, double default_value )
 {
     HKEY keyHandle;
     double tempValue;
@@ -187,4 +187,33 @@ double QVLCRegistry::ReadRegistryDouble( char *path, char *valueName, double def
     return default_value;
 }
 
+int QVLCRegistry::DeleteValue( char *path, char *valueName ) 
+{
+    HKEY keyHandle; 
+    long result;
+    if( (result = RegOpenKeyEx(m_RootKey, path, 0, KEY_WRITE, &keyHandle)) == ERROR_SUCCESS)
+    {
+        result = RegDeleteValue(keyHandle, valueName);
+        RegCloseKey(keyHandle);
+    }
+    //ERROR_SUCCESS = ok everything else you have a problem*g*,  
+    return result;
+}
+
+long QVLCRegistry::DeleteKey( char *path, char *keyName ) 
+{
+    HKEY keyHandle; 
+    long result;
+    if( (result = RegOpenKeyEx(m_RootKey, path, 0, KEY_WRITE, &keyHandle)) == ERROR_SUCCESS)
+    {
+         // be warned the key "keyName" will not be deleted if there are subkeys below him, values
+        // I think are ok and will be recusively deleted, but not keys...
+        // for this case we have to do a little bit more work!
+        result = RegDeleteKey(keyHandle, keyName);
+        RegCloseKey(keyHandle);
+    }
+    //ERROR_SUCCESS = ok everything else you have a problem*g*,  
+    return result;
+}
+
 #endif /* WIN32 */
index 6bc82bd..5b3a6f6 100644 (file)
@@ -34,16 +34,18 @@ public:
     QVLCRegistry(HKEY rootKey);
     ~QVLCRegistry(void);
 
-    void WriteRegistryInt(char *path, char *valueName, int value);
-    void WriteRegistryString(char *path, char *valueName, char *value);
-    void WriteRegistryDouble(char *path, char *valueName, double value);
+    void WriteRegistryInt( const char *path, const char *valueName, int value);
+    void WriteRegistryString( const char *path, const char *valueName, const char *value);
+    void WriteRegistryDouble( const char *path, const char *valueName, double value);
 
-    int ReadRegistryInt(char *path, char *valueName, int default_value);
-    char * ReadRegistryString(char *path, char *valueName, char *default_value);
-    double ReadRegistryDouble(char *path, char *valueName, double default_value);
+    int ReadRegistryInt( const char *path, const char *valueName, int default_value);
+    char * ReadRegistryString( const char *path, const char *valueName, char *default_value);
+    double ReadRegistryDouble( const char *path, const char *valueName, double default_value);
 
-    bool RegistryKeyExists(char *path);
-    bool RegistryValueExists(char *path, char *valueName);
+    bool RegistryKeyExists( const char *path);
+    bool RegistryValueExists( const char *path, const char *valueName);
+    int DeleteValue( char *path, char *valueName );
+    long DeleteKey( char *path, char *keyName ); 
 };
 
 #endif