From pouchintv-dev at baysse.fr Sun May 10 11:23:15 2009 From: pouchintv-dev at baysse.fr (=?iso-8859-1?q?Liste_utilis=E9e_par_les_d=E9veloppeurs?=) Date: Sun, 10 May 2009 09:23:15 +0000 (GMT) Subject: [Pouchintv-dev] =?utf-8?q?Tr_=3A_Erreur_g=C3=A9n=C3=A9rale?= Message-ID: <98845.80072.qm@web23704.mail.ird.yahoo.com> merci, ça remarche ----- Message transféré ---- De : marse end À : pouchintv-dev at baysse.fr Envoyé le : Dimanche, 10 Mai 2009, 10h22mn 38s Objet : Erreur générale Bonjour,je rencontre l'erreur suivante lorsque je veux accéder au "Panneau de contrôle de l?utilisateur". Erreur générale SQL ERROR [ mysqli ] Got error 28 from storage engine [1030] Une erreur SQL est survenue lors du chargement de la page. Veuillez contacter l?administrateur du forum si ce problème persiste. Par ailleurs, j'ai envoyé, hiers un Message Privé (MP), est-ce normale que ce dernier reste dans la boite d'envoi ? cdlt, Endmarsfr Bon week-end -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: http://listes.baysse.fr/pipermail/pouchintv-dev/attachments/20090510/00b8653d/attachment.htm From pouchintv-dev at baysse.fr Sun May 10 10:22:38 2009 From: pouchintv-dev at baysse.fr (=?iso-8859-1?q?Liste_utilis=E9e_par_les_d=E9veloppeurs?=) Date: Sun, 10 May 2009 08:22:38 +0000 (GMT) Subject: [Pouchintv-dev] =?utf-8?b?RXJyZXVyIGfDqW7DqXJhbGU=?= Message-ID: <392518.38341.qm@web23704.mail.ird.yahoo.com> Bonjour,je rencontre l'erreur suivante lorsque je veux accéder au "Panneau de contrôle de l?utilisateur". Erreur générale SQL ERROR [ mysqli ] Got error 28 from storage engine [1030] Une erreur SQL est survenue lors du chargement de la page. Veuillez contacter l?administrateur du forum si ce problème persiste. Par ailleurs, j'ai envoyé, hiers un Message Privé (MP), est-ce normale que ce dernier reste dans la boite d'envoi ? cdlt, Endmarsfr Bon week-end -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: http://listes.baysse.fr/pipermail/pouchintv-dev/attachments/20090510/176b71c6/attachment.htm From pouchintv-dev at baysse.fr Thu May 28 01:17:02 2009 From: pouchintv-dev at baysse.fr (=?iso-8859-1?q?Liste_utilis=E9e_par_les_d=E9veloppeurs?=) Date: Thu, 28 May 2009 01:17:02 +0200 (CEST) Subject: [Pouchintv-dev] [PouchinTVMod] gingko | r185 - in trunk: . Icones/Suisses Message-ID: <20090527231702.9ADDC5F373@mail.baysse.fr> Author: gingko Date: 2009-05-28 01:17:02 +0200 (jeu, 28 mai 2009) New Revision: 185 Added: trunk/Icones/Suisses/SF 1.bmp Removed: trunk/Icones/Suisses/SF1.bmp Modified: trunk/Lisez-moi (setup).txt trunk/Pouchin TV_2005.sln trunk/Pouchin TV_2005.vcproj trunk/Pouchin TV_2008.sln trunk/Pouchin TV_2008.vcproj trunk/Programme_Install.nsi trunk/Setup_2005.vcproj trunk/Setup_2008.vcproj Log: GGénéralisation du script de génération des programmes d'installation à toutes les versions. Program_Install.nsi, Setup_200#.vcproj, Pouchin TV_200#.sln, Lisez-moi (setup).txt: * Le script permet maintenant de générer des fichiers d'installation pour les versions Debug, SBCS et Debug+SBCS. Divers : - Remplacement et renommage de l'icône de la chaîne suisse SF 1. Copié : trunk/Icones/Suisses/SF 1.bmp (de révision 183, trunk/Icones/Suisses/SF1.bmp) =================================================================== (les fichiers binaires diffèrent) Supprimé: trunk/Icones/Suisses/SF1.bmp =================================================================== (les fichiers binaires diffèrent) Modifié: trunk/Lisez-moi (setup).txt =================================================================== --- trunk/Lisez-moi (setup).txt 2009-04-05 00:18:44 UTC (rev 184) +++ trunk/Lisez-moi (setup).txt 2009-05-27 23:17:02 UTC (rev 185) @@ -6,6 +6,7 @@ (car celles-ci ne peuvent pas compiler en mode 64 bits) ; ceci sera peut-être résolu dans une version ultérieure. + Étant donné que ce fichier va contenir à la fois la version 32 bits et la version 64 bits de Pouchin TV Mod, aucune dépendance n'est définie par rapport aux autres projets de cette solution. @@ -28,5 +29,19 @@ d'installation, simplement en sélectionnant la commande "Générer", appliquée sur le projet "Setup". -Le fichier résultant, "PouchinTVMod_setup.exe" sera alors produit dans le -répertoire général de la solution. +Le fichier d'installation peut se décliner en 4 variantes, selon que l'on souhaite +installer une version "Unicode" ou "SBCS", ou encore "Release" ou "Debug", et porte +en conséquence l'un des noms suivants : + +PouchinTVMod_setup..exe +PouchinTVMod_debug_setup..exe +PouchinTVMod_sbcs_setup..exe +PouchinTVMod_debug_sbcs_setup..exe + +Les versions "Debug" sont conçues pour pouvoir s'installer côte à côte avec les +version "Release". +En revanche, les version "Unicode" et "SBCS" s'écrasent mutuellement si installées +l'une après l'autre. + +Le fichier résultant, "PouchinTVMod_setup..exe" sera alors produit +dans le répertoire général de la solution. Modifié: trunk/Pouchin TV_2005.sln =================================================================== --- trunk/Pouchin TV_2005.sln 2009-04-05 00:18:44 UTC (rev 184) +++ trunk/Pouchin TV_2005.sln 2009-05-27 23:17:02 UTC (rev 185) @@ -75,12 +75,12 @@ {C406DAEC-0886-4771-8DEA-9D7329B46CC1}.Release|Win32.Build.0 = Release|Win32 {C406DAEC-0886-4771-8DEA-9D7329B46CC1}.Release|x64.ActiveCfg = Release|x64 {C406DAEC-0886-4771-8DEA-9D7329B46CC1}.Release|x64.Build.0 = Release|x64 - {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug_SBCS|Win32.ActiveCfg = Release|Win32 - {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug_SBCS|x64.ActiveCfg = Release|Win32 - {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug|Win32.ActiveCfg = Release|Win32 - {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug|x64.ActiveCfg = Release|Win32 - {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Release_SBCS|Win32.ActiveCfg = Release|Win32 - {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Release_SBCS|x64.ActiveCfg = Release|Win32 + {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug_SBCS|Win32.ActiveCfg = Debug_SBCS|Win32 + {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug_SBCS|x64.ActiveCfg = Debug_SBCS|Win32 + {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug|Win32.ActiveCfg = Debug|Win32 + {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Debug|x64.ActiveCfg = Debug|Win32 + {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Release_SBCS|Win32.ActiveCfg = Release_SBCS|Win32 + {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Release_SBCS|x64.ActiveCfg = Release_SBCS|Win32 {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Release|Win32.ActiveCfg = Release|Win32 {0A1A8A49-A616-442F-A2A9-007ED24AB66A}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection Modifié: trunk/Pouchin TV_2005.vcproj =================================================================== --- trunk/Pouchin TV_2005.vcproj 2009-04-05 00:18:44 UTC (rev 184) +++ trunk/Pouchin TV_2005.vcproj 2009-05-27 23:17:02 UTC (rev 185) @@ -1328,7 +1328,7 @@ SourceControlFiles="false" > - - - - + + + + + + @@ -53,11 +67,44 @@ + + + + + + + + + Modifié: trunk/Setup_2008.vcproj =================================================================== --- trunk/Setup_2008.vcproj 2009-04-05 00:18:44 UTC (rev 184) +++ trunk/Setup_2008.vcproj 2009-05-27 23:17:02 UTC (rev 185) @@ -24,19 +24,37 @@ WholeProgramOptimization="0" EnableManagedIncrementalBuild="0" > - - - - + + + + + + @@ -54,11 +72,44 @@ + + + + + + + + + From pouchintv-dev at baysse.fr Thu May 28 01:25:15 2009 From: pouchintv-dev at baysse.fr (=?iso-8859-1?q?Liste_utilis=E9e_par_les_d=E9veloppeurs?=) Date: Thu, 28 May 2009 01:25:15 +0200 (CEST) Subject: [Pouchintv-dev] [PouchinTVMod] gingko | r186 - trunk Message-ID: <20090527232515.C00095F373@mail.baysse.fr> Author: gingko Date: 2009-05-28 01:25:14 +0200 (jeu, 28 mai 2009) New Revision: 186 Modified: trunk/channels.cpp trunk/epg.cpp trunk/graph.cpp trunk/graph.h trunk/ini.cpp trunk/ini.h trunk/internet.cpp trunk/main.cpp trunk/network.cpp trunk/network.h trunk/parse.cpp trunk/recprog.cpp trunk/recprog.h trunk/rendering.cpp trunk/res.rc trunk/resource.h trunk/settings.cpp trunk/utils.cpp trunk/utils.h Log: Activation E-AC3, rétro-compatibilité du graphe, délai de détection du signal, alertes avec "Ne plus afficher ce message". main.cpp, channels.cpp : * Activation des flux E-AC3, pour soumission au codec AC3 spécifié. graph.h, graph.cpp, network.h, network.cpp, settings.cpp : * Implémentation d'une option permettant de revenir au graphe des versions antérieures à la 0.5.184.0, car il apparaît que pour certains utilisateurs, le nouveau graphe ne marche pas alors que l'ancien fonctionnait. ini.h, ini.cpp, parse.cpp, channels.cpp, settings.cpp, res.rc, resource.h : * Ajout d'une fonctionnalité permettant un second essai avec un décalage de 5 kHz si aucune chaîne n'est trouvée pour un canal. * Suppression de la fonctionnalité "alignement aux fréquences paires", vraisemblablement inappropriée et remplacée par l'option de recherche avec second essai citée ci-dessus, qui devrait donner de meilleurs résultats. * Le délai de détection du signal dans la recherche de chaînes est rendu configurable (ajoutant donc une seconde option de délai modifiable). * Ajout de macros pour définir les options par défaut de recherche de chaînes. * Ajout d'un bouton, dans le dialogue des options de recherche de chaînes, pour revenir aux options par défaut. ini.h, ini.cpp, settings.cpp : * Ajout d'une fonction "MessageBoxCheck" permettant de définir des messages d'alerte assortis d'une case à cocher "Ne plus afficher ce message". L'état de désactivation de ces alertes est sauvegardé pour chaque type de message dans une section dédiée du fichier "config.ini". * Utilisation de cette fonction pour le dialogue d'avertissement en cas d'usage multiple de "ffdshow", ainsi qu'au message qui avertit de la restauration de l'état antérieur en cas d'annulation de la recherche de chaînes. main.cpp, rendering.cpp : * En cas d'échec d'initialisation du VMR, l'application n'est plus quittée. En lieu et place, l'affichage est désactivé avec un message d'avertissement, à charge pour l'utilisateur de le réactiver ensuite, lui laissant la possibilité d'utiliser les dialogues d'options pour rechercher une solution au problème. * Destruction de l'instance de la classe de gestion du VMR dans le cas de figure ci-dessus, afin d'éviter un plantage. graph.cpp : * Correction d'un bug qui faisait planter l'application si on redémarrait le graphe alors que le dialogue de qualité du signal était ouvert. recprog.h, recprog.cpp, epg.cpp : * Modification de la vérification des enregistrements programmés, afin d'éviter des messages d'erreurs de recouvrement d'enregistrements alors que le qu'en fait les enregistrements comparés référaient à eux-mêmes. internet.cpp : * Mise à jour de la chaîne de version "User-Agent". utils.h, utils.cpp : * Ajout des fonctions utilitaires "ScreenToClient" (version RECT) et "GetChildWindowRect". Modifié: trunk/channels.cpp =================================================================== --- trunk/channels.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/channels.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -147,6 +147,7 @@ break; case tst_AC3: + case tst_EAC3: hr = branche_pid(pMapAc3, pid IF_CONSOLE_CB("Audio AC3")); break; @@ -473,8 +474,8 @@ myprintf(TEXT("%?change_frequence pBDAFreq->put_Bandwidth(8), hr=0x%08x\n"), FAILED(hr), hr); freq += offset_tuner; // Correction de fréquence - if (use_even_frequencies) // Alignement aux fréquences paires (déjà fait mais - freq &= ~1; // possiblement faussé par correction) + //if (use_even_frequencies) // Alignement aux fréquences paires (déjà fait mais + // freq &= ~1; // possiblement faussé par correction) hr = pBDAFreq->put_Frequency(freq); myprintf(TEXT("%?change_frequence pBDAFreq->put_Frequency(%ul), hr=0x%08x\n"), FAILED(hr), freq, hr); Modifié: trunk/epg.cpp =================================================================== --- trunk/epg.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/epg.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -323,7 +323,7 @@ break; } - if (!chaineToProg(ixChaine, nNoEmis, prog) || !prog.verifie(false)) + if (!chaineToProg(ixChaine, nNoEmis, prog) || !prog.verifie()) return FALSE; // Ces deux valeurs ont été extraites de la boîte de dialogue au moment de leur sélection : Modifié: trunk/graph.cpp =================================================================== --- trunk/graph.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/graph.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -27,10 +27,7 @@ #include "graph.h" -#if USE_STD_NETWP == 0 #include "network.h" -#endif - #include "epgfilter.h" #if USE_PMTFILTER @@ -381,7 +378,6 @@ { HRESULT hr; -#if USE_STD_NETWP if (bFindExisting) { hr = cherche_pin(pDemux, PINDIR_OUTPUT, pOutPin, &am); if (hr != E_FAIL) { @@ -389,7 +385,6 @@ return hr; } } -#endif // Note : utilisation de "const_cast" ici car on ne s'attend pas normalement à ce que // "CreateOutputPin" modifie les objets pointés. @@ -739,7 +734,6 @@ return hr; } -#if USE_STD_NETWP static HRESULT render_tif(IMpeg2Demultiplexer * pMpeg2Demux) { // FC772AB0-0C7F-11D3-8FF2-00A0C9224CF4 @@ -782,7 +776,6 @@ return hr; } -#endif // USE_STD_NETWP static HRESULT render_epgfilter(IMpeg2Demultiplexer * pMpeg2Demux) { @@ -888,10 +881,10 @@ HRESULT hr; -#if USE_STD_NETWP - if (FAILED(hr = render_tif(pMpeg2Demux))) - return erreur(TEXT("Erreur lors du rendu de la broche TIF"), hr); -#endif + if (!autre_graphe) { + if (FAILED(hr = render_tif(pMpeg2Demux))) + return erreur(TEXT("Erreur lors du rendu de la broche TIF"), hr); + } if (FAILED(hr = render_mp2v(pMpeg2Demux))) return erreur(TEXT("Erreur lors du rendu de la broche vidéo MPEG2"), hr); @@ -1198,20 +1191,21 @@ #endif // #if EXPORT_GRAPH { // Création filtre dvb-t -#if USE_STD_NETWP - hr = create_and_add_filter(CLSID_DVBTNetworkProvider, - TEXT("Microsoft DVB-T Network Provider"), pNetworkProvider); - if (FAILED(hr)) - return hr; -#else - pNetworkProvider = - dynamic_cast(CNetworkProvider::CreateInstance(NULL, &hr)); + if (!autre_graphe) { + hr = create_and_add_filter(CLSID_DVBTNetworkProvider, + TEXT("Microsoft DVB-T Network Provider"), pNetworkProvider); + if (FAILED(hr)) + return hr; + } else { + // Ancien graphe + pNetworkProvider = + dynamic_cast(CNetworkProvider::CreateInstance(NULL, &hr)); - if (SUCCEEDED(hr)) - hr = AddFilterToGraph(pNetworkProvider, CNetworkProvider::szFilterName); - if (FAILED(hr)) - return erreur(TEXT("Échec de l'insertion du filtre Network Provider"), hr); -#endif + if (SUCCEEDED(hr)) + hr = AddFilterToGraph(pNetworkProvider, CNetworkProvider::szFilterName); + if (FAILED(hr)) + return erreur(TEXT("Échec de l'insertion du filtre Network Provider"), hr); + } CComPtr pAvantDemux; eCompat = filtre_compat(pNetworkTuner); @@ -1346,6 +1340,9 @@ nErrStep = 0; + if (!pStats) // pStats parfois NULL transitoirement si fermeture du programme + return; // avec fenêtre de statistiques ouverte + if (FAILED(hr = pStats->get_SignalPresent(&bBool))) { if (hr!=E_PROP_ID_UNSUPPORTED) { myprintf(TEXT("Erreur get_SignalPresent, hr=0x%08x\n"), hr); Modifié: trunk/graph.h =================================================================== --- trunk/graph.h 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/graph.h 2009-05-27 23:25:14 UTC (rev 186) @@ -41,7 +41,6 @@ * ou encore pour pouvoir restaurer d'anciennes fonctionnalités. * @{ */ -#define USE_STD_NETWP 1 //!< Utilisation du Microsoft DVB-T Network Provider #define USE_AUTO_RETUNE 1 //!< Resyntonisation automatique #define USE_PMTFILTER 1 //!< Activation/désactivation filtre PMT /** Modifié: trunk/ini.cpp =================================================================== --- trunk/ini.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/ini.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -91,7 +91,7 @@ {IDM_STOP_GRAPH, TEXT("Arrêter le graphe"), TEXT("Debug GrapheArrêt"), {true, true, false, TEXT('R')}}, {IDM_GRAPH_STATE, TEXT("Voir l'état du graphe"), TEXT("Debug ÉtatGraphe"), {false, false, false, TEXT('R')}}, #endif - {IDM_ABOUT, TEXT("Afficher la fenêtre des crédits"), NULL, {false, true, false, VK_F1}}, + {IDM_ABOUT, TEXT("Afficher la fenêtre des crédits"), NULL, {false, true, false, VK_F1}}, }; /** @@ -148,10 +148,10 @@ int avance_enreg = 8; int retard_enreg = 16; extern SearchMethod - methode_recherche = sm_prefs; -OffsetsToUse use_offsets = uo_167; -int autonum_undef = 60; -int autonum_duplicate = 100; + methode_recherche = INI_METHODE_RECH_DEFAULT; +OffsetsToUse use_offsets = INI_USE_OFFSETS_DEFAULT; +int autonum_undef = INI_AUTONUM_UNDEF_DEFAULT; +int autonum_duplicate = INI_AUTONUM_DUP_DEFAULT; bool suspend_minimized = false; bool minimize_system_tray = false; bool use_vmr_deinterlace = false; @@ -176,12 +176,15 @@ //!< fenêtre EPG pour l'audio TCHAR nom_tuner[256]; +bool autre_graphe = false; //!< Utilisation du graphe des versions précédentes // Valeurs sauvegardées séparément pour chaque type de tuner : TCHAR nom_receiver[256]; int offset_tuner = 0; -bool use_even_frequencies = false; -int delai_tuner = 600; +bool try_adding_5khz = INI_TRY_ADDING_5KHZ_DEFAULT; +// bool use_even_frequencies = false; +int delai_tuner1 = INI_DELAI_TUNER1_DEFAULT; +int delai_tuner2 = INI_DELAI_TUNER2_DEFAULT; bool scan_ignore_presence = false; bool scan_ignore_lock = false; bool scan_ignore_quality = false; @@ -239,6 +242,7 @@ // ==================================================================================== static TCHAR ini_config_section[] = TEXT("Config"); ///< Nom de la section contenant la configuration static TCHAR ini_shortcut_section[] = TEXT("Raccourcis"); ///< Nom de la section contenant les raccourcis clavier +static TCHAR ini_dontshow_section[] = TEXT("Désactiver"); ///< Nom de la section des messages à ne plus afficher static TCHAR ini_filtre_MPEG2[] = TEXT("Filtre MPEG2"); static TCHAR ini_filtre_H264[] = TEXT("Filtre H264"); @@ -279,13 +283,16 @@ static TCHAR ini_position_console[] = TEXT("Position console"); #endif // #if USE_CONSOLE==1 +static TCHAR ini_autre_graphe[] = TEXT("Graphe alternatif"); static TCHAR ini_tuner[] = TEXT("Tuner TNT"); // Valeurs sauvegardées séparément pour chaque type de tuner : static TCHAR ini_receiver[] = TEXT("Récepteur TNT"); static TCHAR ini_offset_tuner[] = TEXT("Offset tuner"); -static TCHAR ini_use_even_frequencies[] = TEXT("Aligner aux 2 kHz"); -static TCHAR ini_delai_tuner[] = TEXT("Délai recherche tuner"); +// static TCHAR ini_use_even_frequencies[] = TEXT("Aligner aux 2 kHz"); +static TCHAR ini_try_adding_5khz[] = TEXT("Essayer +5 kHz si échec"); +static TCHAR ini_delai_tuner1[] = TEXT("Délai verrouillage tuner"); +static TCHAR ini_delai_tuner2[] = TEXT("Délai recherche tuner"); static TCHAR ini_scan_ignore_presence[] = TEXT("Ignorer signal présent"); static TCHAR ini_scan_ignore_lock[] = TEXT("Ignorer signal verrouillé"); static TCHAR ini_scan_ignore_quality[] = TEXT("Ignorer signal qualité"); @@ -1258,9 +1265,9 @@ if (use_offsets>=0 && use_offsets<_countof(aOffsets)) nKHz += aOffsets[use_offsets]; - // Alignement aux fréquences paires si demandé - if (use_even_frequencies) - nKHz &= ~1; + //// Alignement aux fréquences paires si demandé + //if (use_even_frequencies) + // nKHz &= ~1; return nKHz; } @@ -1312,6 +1319,7 @@ { CIniFile cChanFile(scan_ini); +#if 0 // tableau décrivant les corrections de fréquences à apporter à différents constructeurs static struct SuggestedOffsets { @@ -1337,7 +1345,8 @@ _stprintf_s(msg, _countof(msg), TEXT("L'offset recommandé pour une carte %s est %i.\nVoulez vous utiliser %i ?"), sof.tuner, sof.offset, sof.offset); - if (MessageBox(hMainWnd, msg, ttl, MB_YESNO | MB_ICONQUESTION) == IDYES) { + if (MessageBoxCheck(hMainWnd, msg, ttl, MB_YESNO | MB_ICONQUESTION, + IDNO, TEXT("Offset recommandé")) == IDYES) { offset_tuner = sof.offset; CConfigFile().save_int(ini_offset_tuner, offset_tuner); } @@ -1346,7 +1355,7 @@ break; } } - +#endif clear(); cChanFile.NewSection(ville); #if 0 @@ -1953,8 +1962,10 @@ save_driver_str(ini_receiver, nom_receiver); save_int(ini_offset_tuner, offset_tuner); - save_bool(ini_use_even_frequencies, use_even_frequencies); - save_int(ini_delai_tuner, delai_tuner); + save_bool(ini_try_adding_5khz, try_adding_5khz); + //save_bool(ini_use_even_frequencies, use_even_frequencies); + save_int(ini_delai_tuner1, delai_tuner1); + save_int(ini_delai_tuner2, delai_tuner2); save_bool(ini_scan_ignore_presence, scan_ignore_presence); save_bool(ini_scan_ignore_lock, scan_ignore_lock); save_bool(ini_scan_ignore_quality, scan_ignore_quality); @@ -1972,6 +1983,7 @@ CConfigFile cConfig; cConfig.save_driver_str(ini_tuner, nom_tuner); + cConfig.save_bool(ini_autre_graphe, autre_graphe); cConfig.save_assoc(ini_methode_recherche, aSMethodTable, // (on ne sauve pas l'état min(methode_recherche, sm_prefs)); // "tout réinitialiser") @@ -2270,8 +2282,10 @@ load_driver_str(ini_receiver, nom_receiver); offset_tuner = load_int(ini_offset_tuner, 0); - use_even_frequencies = load_bool(ini_use_even_frequencies, false); - delai_tuner = load_int(ini_delai_tuner, 600); + try_adding_5khz = load_bool(ini_try_adding_5khz, INI_TRY_ADDING_5KHZ_DEFAULT); + // use_even_frequencies = load_bool(ini_use_even_frequencies, false); + delai_tuner1 = load_int(ini_delai_tuner1, INI_DELAI_TUNER1_DEFAULT); + delai_tuner2 = load_int(ini_delai_tuner2, INI_DELAI_TUNER2_DEFAULT); scan_ignore_presence = load_bool(ini_scan_ignore_presence, false); scan_ignore_lock = load_bool(ini_scan_ignore_lock, false); scan_ignore_quality = load_bool(ini_scan_ignore_quality, false); @@ -2306,13 +2320,17 @@ } } + autre_graphe = cConfig.load_bool(ini_autre_graphe, false); + cConfig.load_driver_str(ini_filtre_MPEG2, filtreMPEG2); cConfig.load_driver_str(ini_filtre_H264, filtreH264); - methode_recherche = (SearchMethod)cConfig.load_assoc(ini_methode_recherche, aSMethodTable, sm_prefs); - use_offsets = (OffsetsToUse)cConfig.load_assoc(ini_use_offsets, aOffsetsToUse, uo_167); - autonum_undef = cConfig.load_int(ini_autonum_undef, 60); - autonum_duplicate = cConfig.load_int(ini_autonum_duplicate, 100); + methode_recherche = (SearchMethod)cConfig.load_assoc(ini_methode_recherche, + aSMethodTable, INI_METHODE_RECH_DEFAULT); + use_offsets = (OffsetsToUse)cConfig.load_assoc(ini_use_offsets, + aOffsetsToUse, INI_USE_OFFSETS_DEFAULT); + autonum_undef = cConfig.load_int(ini_autonum_undef, INI_AUTONUM_UNDEF_DEFAULT); + autonum_duplicate = cConfig.load_int(ini_autonum_duplicate, INI_AUTONUM_DUP_DEFAULT); cConfig.load_driver_str(ini_filtre_audio, filtreAudio); cConfig.load_driver_str(ini_filtre_ac3, filtreAc3); @@ -2424,3 +2442,256 @@ } } } + +struct MessageBoxHookData +{ + /// Liste simplifiée de types d'items + enum ClassTypes { + ct_other, + ct_button, //!< Bouton + ct_static //!< Item statique avec texte ou icône + }; + + /// Identification simplifiée du type d'un item présent dans la boîte de dialogue + static ClassTypes GetClassType(HWND hCtl) + { + TCHAR szClass[64]; + + GetClassName(hCtl, szClass, _countof(szClass)); + if (_tcsicmp(szClass, TEXT("Button"))==0) + return ct_button; + if ( + _tcsicmp(szClass, TEXT("Static"))==0 && + (GetWindowTextLength(hCtl)>0 || (GetWindowLongPtr(hCtl, GWL_STYLE)&SS_ICON)!=0) + ) + return ct_static; + return ct_other; + } + + /// Structure destinée à récupérer les informations concernant les items présents dans la + /// boîte de dialogue + struct ParseItemsHelper + { + RECT sAllItemsRect; //!< Union des rectangles de tous les items (sauf statiques vides) + RECT sAllButtsRect; //!< Union des rectangles de tous les boutons + HWND hButton; //!< Handle du premier bouton rencontré + + /// Fonction "callback" non statique appelée pour chaque item + BOOL CALLBACK ItemProc(HWND hCtl) + { + RECT sRect; + + GetChildWindowRect(hCtl, sRect); + switch (GetClassType(hCtl)) { + case ct_button: + UnionRect(&sAllButtsRect, &sAllButtsRect, &sRect); + if (hButton==NULL) + hButton = hCtl; + // ... (passage à travers) + case ct_static: + UnionRect(&sAllItemsRect, &sAllItemsRect, &sRect); + } + return TRUE; + } + + /// Fonction "callback" statique appelée pour chaque item + static BOOL CALLBACK ItemProc(HWND hCtl, LPARAM lParam) { + return reinterpret_cast(lParam)->ItemProc(hCtl); } + + /** + * Constructeur, énumérant les items afin d'obtenir : + * - L'union des rectangles de tous les items + * - L'union des rectangles de tous les boutons + * - La "handle" d'un bouton quelconque pour en extraire la configuration du nouvel item + * \param[in] hDlg "Handle" de la boîte de dialogue dont les items sont à énumérer + * \note Normalement, les items d'une "MessageBox" sont l'item de texte, l'item d'icône + * (optionnel) et un item pour chaque bouton. Sous Windows Vista (mais pas sous Windows 7, + * où cette fonctionnalité semble être assurée autrement) il y a un item statique qui définit + * un bandeau gris sous les boutons. Cet item est ici ignoré s'il est rencontré. + **/ + ParseItemsHelper(HWND hDlg) : + sAllItemsRect(RECT()), + sAllButtsRect(RECT()), + hButton(NULL) + { + EnumChildWindows(hDlg, ItemProc, (LPARAM)this); + } + }; + + /// Fonction "callback" statique appelée pour aligner les boutons à droite + static BOOL CALLBACK AlignRightProc(HWND hCtl, LPARAM lParam) + { + if (GetClassType(hCtl)==ct_button) { + RECT sRect; + + GetChildWindowRect(hCtl, sRect); + OffsetRect(&sRect, (int)lParam, 0); + SetWindowPos(hCtl, 0, sRect.left, sRect.top, 0, 0, + SWP_NOSIZE|SWP_NOZORDER|SWP_NOREPOSITION); + } + return TRUE; + } + + static WNDPROC procMsgBox; //!< Sauvegarde de la procédure d'origine de la boîte de dialogue + static HHOOK hHook; //!< "Handle" du "hook" créé + static LPCTSTR pszMbcKey; //!< Clé d'identification de la boîte de dialogue + static LPCTSTR pszMbTitle; //!< Titre de la boîte de message (pour vérifier, par sécurité) + + static void UnsetHook() + { + if (hHook) { + UnhookWindowsHookEx(hHook); + hHook = NULL; + } + } + + /// Fonction "callback" de surclassement de la fonction de gestion de la boîte de dialogue + static LRESULT CALLBACK MbWindowProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) + { + LRESULT rc = CallWindowProc(procMsgBox, hDlg, uMsg, wParam, lParam ); + + switch (uMsg) { + + case WM_INITDIALOG: { + LPCTSTR pszCheckBoxText = TEXT("Ne plus afficher ce message"); + ParseItemsHelper sChEnDat(hDlg); + SIZE sTxtSiz = {0, 0}; // Rectangle minimal du texte + SIZE sCtlSiz = {0, RHgt(sChEnDat.sAllButtsRect)}; // Rectangle de la "check box" + HFONT hTxtFont = NULL; // Police de caractères extraite d'un bouton + + // Distance entre le bouton le plus à gauche et l'item le plus à gauche (diminué de 4 pixels) : + LONG nSpaceOnLeft = sChEnDat.sAllButtsRect.left - sChEnDat.sAllItemsRect.left - 6; + + // Calculer le rectangle exact dont a besoin la case à cocher pour s'afficher correctement, + // avec son texte + if (sChEnDat.hButton) { + hTxtFont = (HFONT)SendMessage(sChEnDat.hButton, WM_GETFONT, 0, NULL); + + HDC hDC = GetDC(sChEnDat.hButton); + HGDIOBJ hSavFont = SelectObject(hDC, (HGDIOBJ)hTxtFont); + + // Obtenir la taille requise pour le texte : + GetTextExtentPoint32(hDC, pszCheckBoxText, strlen_T(pszCheckBoxText), &sTxtSiz); + SelectObject(hDC, hSavFont); + sCtlSiz.cx = sTxtSiz.cx+16+2; // Ajouter la largeur nécessaire pour la case elle-même + } + + if (nSpaceOnLeft < sCtlSiz.cx) { + // Espace insuffisant à gauche des boutons : aligner tous les boutons à droite. + + // Distance entre le bouton le plus à droite et l'item le plus à droite : + LONG nSpaceOnRight = sChEnDat.sAllItemsRect.right - sChEnDat.sAllButtsRect.right; + + // Note : sous Windows Vista et Windows 7, les boutons sont déjà alignés à droite. Ceci ne + // devrait donc avoir d'effet que sous Windows XP. + if (nSpaceOnRight>=0) { + // Aligner tous les boutons à droite de la boîte de dialogue : + EnumChildWindows(hDlg, AlignRightProc, (LPARAM)nSpaceOnRight); + OffsetRect(&sChEnDat.sAllButtsRect, nSpaceOnRight, 0); + nSpaceOnLeft += nSpaceOnRight; + } + } + + if (nSpaceOnLeft < sCtlSiz.cx) { + // Espace toujours insuffisant : tenter d'afficher sur deux lignes + sCtlSiz.cx = nSpaceOnLeft; + sCtlSiz.cy = sTxtSiz.cy*2+2; + } + + HWND hWndCheck = + CreateWindowEx(0, TEXT("Button"), pszCheckBoxText, + WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_CHECKBOX|BS_MULTILINE , + sChEnDat.sAllItemsRect.left, sChEnDat.sAllButtsRect.bottom-sCtlSiz.cy, + sCtlSiz.cx, sCtlSiz.cy, + hDlg, (HMENU)IDC_DONTSHOWAGAIN, hAppInstance, NULL); + + if (hWndCheck && hTxtFont) + SendMessage(hWndCheck, WM_SETFONT, (WPARAM)hTxtFont, FALSE); + break; } + + case WM_DESTROY: + // Fermeture de la boîte de dialogue : on teste l'état de la case à cocher, + // et si elle est cochée, on l'indique dans le fichier de configuration. + if (pszMbcKey && IsDlgButtonChecked(hDlg, IDC_DONTSHOWAGAIN)==BST_CHECKED) + CConfigFile().NewSection(ini_dontshow_section).save_bool(pszMbcKey, true); + } + return rc; + } + + /// Fonction "hook" détectant l'initialisation de la boîte de dialogue "MessageBox", afin + /// d'en surclasser la procédure de gestion + static LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) + { + LRESULT lResult = CallNextHookEx(hHook, nCode, wParam, lParam); + + if (nCode==HC_ACTION) { //Checks if an action is beeing active + const CWPSTRUCT & pwp = *reinterpret_cast(lParam); + + if (pwp.message==WM_INITDIALOG) { + TCHAR szTitle[128]; + + GetWindowText(pwp.hwnd, szTitle, _countof(szTitle)); + if (_tcscmp(pszMbTitle, szTitle)==0) { // Vérifier le titre, par précaution + procMsgBox=(WNDPROC)SetWindowLongPtr(pwp.hwnd, GWLP_WNDPROC, (LONG_PTR)MbWindowProc); + + // Annulation du "hook", qui n'est plus nécessaire + UnsetHook(); + } + } + } + + return lResult; + } + + /// Constructeur + MessageBoxHookData(LPCTSTR pszMbcKy, LPCTSTR pszTitle) + { + if (hHook == NULL) { + hHook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, NULL, GetCurrentThreadId()); + pszMbcKey = pszMbcKy; + pszMbTitle = pszTitle; + } + } + + /// Destructeur + ~MessageBoxHookData() + { + UnsetHook(); // Probablement redondant, mais précaution indispensable + pszMbcKey = NULL; + pszMbTitle = NULL; + } +}; + +WNDPROC MessageBoxHookData::procMsgBox = NULL; +HHOOK MessageBoxHookData::hHook = NULL; +LPCTSTR MessageBoxHookData::pszMbcKey = NULL; +LPCTSTR MessageBoxHookData::pszMbTitle = NULL; + +/** + * Version de \p MessageBox avec une case ajoutée "Ne plus afficher ce message". + * Si l'utilisateur coche cette case (dont l'état sera sauvegardé dans le fichier de configuration) + * avant de fermer la boîte de dialogue, alors tous les appels subséquents seront ignorés, + * et la valeur par défaut sera retournée. + * \param[in] hWnd "Handle" de la fenêtre parente + * \param[in] pszText Message à afficher + * \param[in] pszTitle Titre de la fenêtre + * \param[in] uType Flags spécifiant le contenu et le comportement de la boîte de message + * \param[in] iDefault Valeur par défaut retournée si l'affichage est ignoré + * \param[in] pszMbcKey Identifiant unique pour ce message + * \note La fonction cherche à ajouter la case "Ne plus afficher ce message" à gauche des + * boutons de la boîte de dialogue, décalant ceux-ci à droite si nécessaire et possible, et tentant + * l'affichage sur deux lignes si l'espace est ensuite toujours insuffisant. Néanmoins, il n'est pas + * garanti que cette case puisse s'afficher si la boîte de message a très peu de texte et beaucoup + * de boutons. Il est de la responsabilité du programmeur d'éviter cette situation. + **/ +int MessageBoxCheck(HWND hWnd, LPCTSTR pszText, LPCTSTR pszTitle, + UINT uType, int iDefault, LPCTSTR pszMbcKey) +{ + if (CConfigFile().NewSection(ini_dontshow_section).load_bool(pszMbcKey)) + return iDefault; // Si ce message est désactivé + + MessageBoxHookData sHookData(pszMbcKey, pszTitle); // La simple présence de cet objet installe + // et gère le "hook" pour la boîte de message. + + return MessageBox(hWnd, pszText, pszTitle, uType); +} \ Pas de fin de ligne à la fin du fichier Modifié: trunk/ini.h =================================================================== --- trunk/ini.h 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/ini.h 2009-05-27 23:25:14 UTC (rev 186) @@ -203,12 +203,15 @@ epg_typerecaudio; //!< Type d'enregistrement précédement utilisé dans la //!< fenêtre EPG pour l'audio extern TCHAR nom_tuner[256]; //!< Nom du tuner à utiliser +extern bool autre_graphe; //!< Utilisation du graphe des versions précédentes // Valeurs sauvegardées séparément pour chaque type de tuner : extern TCHAR nom_receiver[256]; //!< Nom du récepteur à utiliser extern int offset_tuner; //!< Offset à appliquer à toutes les fréquences recherchées -extern bool use_even_frequencies; //!< Alignement sur des fréquences paires -extern int delai_tuner; //!< Délai de stabilisation à appliquer au tuner pendant la recherche +extern bool try_adding_5khz; //!< Essayer d'ajouter 5 kHz si aucun signal trouvé +// extern bool use_even_frequencies; //!< Alignement sur des fréquences paires +extern int delai_tuner1; //!< Délai de verrouillage à appliquer au tuner pendant la recherche +extern int delai_tuner2; //!< Délai de stabilisation à appliquer au tuner pendant la recherche extern bool scan_ignore_presence; //!< Ignorer indicateur de présence du signal prendant la recherche extern bool scan_ignore_lock; //!< Ignorer indicateur de verrou du signal prendant la recherche extern bool scan_ignore_quality; //!< Ignorer indicateur de qualité du signal prendant la recherche @@ -219,6 +222,21 @@ /** @} */ // fin de configVars +/** @defgroup configVarsDefault Valeurs de configuration par défaut + * Macros définissant les valeurs par défaut de certains paramètres de configuration + * @{ + **/ + +#define INI_DELAI_TUNER1_DEFAULT 200 //!< Délai de verrouillage à appliquer au tuner +#define INI_DELAI_TUNER2_DEFAULT 600 //!< Délai de stabilisation à appliquer au tuner +#define INI_AUTONUM_UNDEF_DEFAULT 60 //!< Numéro de départ pour les chaînes non numérotées +#define INI_AUTONUM_DUP_DEFAULT 100 //!< Décalage de numérotation pour les chaînes dupliquées +#define INI_USE_OFFSETS_DEFAULT uo_167 //!< Offsets à utiliser +#define INI_METHODE_RECH_DEFAULT sm_prefs //!< Méthode de recherche des chaînes +#define INI_TRY_ADDING_5KHZ_DEFAULT false //!< Essayer d'ajouter 5 kHz si aucun signal trouvé + +/** @} */ // fin de configVarsDefault + // ==================================================================================== // Fin des variables de configuration // ==================================================================================== @@ -597,3 +615,20 @@ * Obtenir le nombre de raccourcis défini. **/ int get_shortcuts_count(); + + +/** + * Version de \p MessageBox avec une case ajoutée "Ne plus afficher ce message". + * Si l'utilisateur coche cette case (dont l'état sera sauvegardé dans le fichier de configuration) + * avant de fermer la boîte de dialogue, alors tous les appels subséquents seront ignorés, + * et la valeur par défaut sera retournée. + * \param[in] hWnd "Handle" de la fenêtre parente + * \param[in] pszText Message à afficher + * \param[in] pszTitle Titre de la fenêtre + * \param[in] uType Flags spécifiant le contenu et le comportement de la boîte de message + * \param[in] iDefault Valeur par défaut retournée si l'affichage est ignoré + * \param[in] pszMbcKey Identifiant unique pour ce message + **/ +int MessageBoxCheck(HWND hWnd, LPCTSTR pszText, LPCTSTR pszTitle, + UINT uType, int iDefault, LPCTSTR pszMbcKey); + Modifié: trunk/internet.cpp =================================================================== --- trunk/internet.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/internet.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -33,9 +33,10 @@ #include "ini.h" #include "internet.h" +#include "version.h" /// User-Agent utilisé par défaut -#define USER_AGENT (TEXT("Pouchin TV Mod/0.4")) +#define USER_AGENT TEXT("Pouchin TV Mod/") TEXT(PTVM_VERSION_STR) /** * Initialise les valeurs par défaut, l'User-Agent, la méthode à GET et le type de fichiers accepté Modifié: trunk/main.cpp =================================================================== --- trunk/main.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/main.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -504,8 +504,8 @@ UINT nFlags = i==ixSonCourant ? MF_CHECKED : MF_UNCHECKED; - if (son_courant.type==tst_EAC3) - nFlags|= MF_GRAYED; // E-AC3 non disponible pour le moment + //if (son_courant.type==tst_EAC3) + // nFlags|= MF_GRAYED; // E-AC3 non disponible pour le moment AppendMenu(pistes, nFlags, IDM_PISTES_BASE+i, tab); } @@ -2604,7 +2604,7 @@ // On quitte (pas de mise à jour, ou attente trop longue), mais on // affiche la fenêtre de Pouchin TV Mod déjà lancée au premier plan if (!bMinimize) { - HWND hPouchintvmod = FindWindow(szAppName, TEXT("Pouchin TV Mod")); + HWND hPouchintvmod = FindWindow(szAppName, szAppName); if (hPouchintvmod) { SendMessage(hPouchintvmod, WM_SYSCOMMAND, SC_RESTORE, NULL); @@ -2703,7 +2703,7 @@ { HWND hWnd = CreateWindowEx(0, szAppName, - TEXT("Pouchin TV Mod"), + szAppName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, winPos.X, winPos.Y, @@ -2828,8 +2828,14 @@ CoInitializeEx(NULL, COINIT_MULTITHREADED); } - if (!do_init_vmr()) - return -1; + if (!do_init_vmr()) { + affiche_erreurs( + TEXT("Le module de rendu vidéo (VMR) n'a pas pu s'initialiser. Le programme va s'exécuter\n") + TEXT("avec l'affichage vidéo désactivé. Merci de vous assurer de la disponibilité de votre\n") + TEXT("carte graphique, puis de vous rendre dans la configuration de Pouchin TV Mod\n") + TEXT("(onglet \"Options\") pour y choisir et y (ré)activer une méthode de rendu vidéo."), S_OK); + vmr_mode = vmt_null; + } if (cmdOptions && cmdOptions->nChaine > 0) { // Un numéro de chaîne passé en paramètre est prioritaire sur la chaîne @@ -3006,6 +3012,8 @@ // On n'a plus besoin des options de la ligne de commande, on libère donc la mémoire delete [] cmdOptions; cmdOptions = NULL; // Pas d'options en cas de redémarrage du programme + + myprintf(TEXT("%?\n############### (Redémarrage interne de l'application) #################\n\n"), bNeedRestart); } while (bNeedRestart); CleanInstance(); Modifié: trunk/network.cpp =================================================================== --- trunk/network.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/network.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -21,8 +21,6 @@ */ #include "network.h" -#if USE_STD_NETWP==0 - #include "base.h" CPinBidon::CPinBidon(HRESULT *phr, CSource *pFilter) : @@ -150,5 +148,3 @@ // myprintf(TEXT("CNetworkProvider::GetPin %i\n"), n); return (n==0) ? m_bidon : NULL; } - -#endif // #if USE_STD_NETWP==0 Modifié: trunk/network.h =================================================================== --- trunk/network.h 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/network.h 2009-05-27 23:25:14 UTC (rev 186) @@ -29,8 +29,6 @@ #include "graph.h" -#if USE_STD_NETWP==0 - #include #include @@ -78,5 +76,3 @@ static LPCWSTR szFilterName; static CUnknown * WINAPI CreateInstance(IUnknown *pUnk, HRESULT *phr); }; - -#endif // #if USE_STD_NETWP==0 Modifié: trunk/parse.cpp =================================================================== --- trunk/parse.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/parse.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -270,7 +270,7 @@ DWORD _dwTimeout; CComPtr pSectionList; MPEG2_FILTER filter; - IF_CONSOLE(FOURCC tableName;) + IF_CONSOLE(FOURCC tableName;) BYTE nextSection; BYTE lastSection; public: @@ -403,24 +403,42 @@ // Choppe le tunning space change_frequence(khz); - Sleep(100); // Attendre quand même 100 mS ici (rendre paramétrable ?) + Sleep(delai_tuner1); // Délai de verrouillage SignalState eSState = CheckQuality(0); - // À ce stade, on quitte si le signal n'est même pas présent - if (eSState < ss_unlocked) - return eSState; + // Si le signal n'est pas présent, on tente de se décaler de 5 kHz (certains tuners n'aiment pas être + // réglés sur la fréquence exacte + if (eSState < ss_unlocked) { + khz += 5; + log(TEXT("Pas de signal ; essai à +5 kHz = %i kHz\n"), khz); + // Choppe le tunning space + change_frequence(khz); + + Sleep(delai_tuner1); // Délai de verrouillage + + SignalState eSState = CheckQuality(0); + + // À ce stade, on quitte si le signal n'est même pas présent + if (eSState < ss_unlocked) { + log(TEXT("Aucun signal détecté.\n")); + return eSState; + } + } + + log(TEXT("Signal détecté : attente stabilisation.\n")); + int nTuneDelay = 0; // Attente de stabilisation du tuner (délai fragmenté en tranches égales // à l'intervalle de lecture des statistiques du signal) do { if (eScanState!=ss_running) - // On quitte a demandé l'arrêt ou l'annulation + // On quitte si l'arrêt ou l'annulation a été demandé break; - int nSubDelay = min(delai_tuner-nTuneDelay, DUREE_SIGNAL_STATS); + int nSubDelay = min(delai_tuner2-nTuneDelay, DUREE_SIGNAL_STATS); Sleep(nSubDelay); @@ -428,7 +446,7 @@ eSState = CheckQuality(nTuneDelay); // À ce stade, on quitte si le signal n'est pas verrouillé - } while (nTuneDelay= ss_bad_quality); + } while (nTuneDelay= ss_bad_quality); // Retourner l'état de détection du signal return eSState; @@ -699,8 +717,11 @@ boolToYesNo(scan_ignore_quality)); log(TEXT(" -- Temps de stabilisation = %u mS\n") TEXT(" -- Correction fréquence tuner = %i kHz (non inclus dans valeurs affichées)\n") - TEXT(" -- Utiliser fréquences paires = %s\n"), - delai_tuner, offset_tuner, boolToYesNo(use_even_frequencies)); + // TEXT(" -- Utiliser fréquences paires = %s\n"), + TEXT(" -- Essayer +5 kHz si échec = %s\n"), + delai_tuner2, offset_tuner, + // boolToYesNo(use_even_frequencies), + boolToYesNo(try_adding_5khz)); log(TEXT("\nCanaux/Ville : %s\n"), _tcscmp(nomVille, NULL_NAME)==0 ? TEXT("Tous") : @@ -722,14 +743,13 @@ SignalStatistics sSStats; // Qualité du signal - // Note : bien que 'khz' soit déjà chargé (pour le log), la méthode 'tune' le calcule à - // nouveau. Dans une version future, il pourrait arriver que cette fonction opère des - // corrections de fréquence mineures. - bool bSignalFound = tune(canal_no, khz, sSStats)==ss_signal_ok; - SendMessage(hwndDlg, WM_APP_SCAN_NOTIFY, MAKEWPARAM(sn_info_freq, canal_no), LPARAM(khz)); + // Note : bien que 'khz' soit déjà chargé (pour le log), la méthode 'tune' le calcule à nouveau. + // En effet, cette fonction est susceptible d'opérer des c orrections de fréquence mineures. + bool bSignalFound = tune(canal_no, khz, sSStats)==ss_signal_ok; + if (bSignalFound) { log(TEXT(" ** %s%sRecherche de canaux\n"), (scan_ignore_presence ? TEXT("") : TEXT("Signal présent - ")), Modifié: trunk/recprog.cpp =================================================================== --- trunk/recprog.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/recprog.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -215,10 +215,11 @@ /** * \brief Vérification de la validité de la programmation * - * \param[in] modif Mettre à \p true si on est en train de modifier une programmation + * \param[in] prog_modif Si non NULL, pointeur sur la programmation qu'on modifie (pour + * éviter de la comparer à elle-même lors des tests de recouvrement) * \retval \p true ou \p false selon succès ou échec, respectivement **/ -bool Programme::verifie(bool modif) const +bool Programme::verifie(const Programme * prog_modif) const { int ixChaine = Canaux.trouve_par_cle(cleChaine); SYSTEMTIME localtime; @@ -271,18 +272,19 @@ for(int i = 0; i < nbProgrammes; i++) { const Programme & prog_verif = Programmes[i]; - if (!modif) { - if (_tcscmp(prog_verif.nom, nom) == 0) { - affiche_erreurs(TEXT("Ce nom est déjà utilisé")); - return false; - } + if (&prog_verif ==prog_modif) + continue; // Ne pas comparer la programmation à celle en cours de modification + + if (_tcscmp(prog_verif.nom, nom) == 0) { + affiche_erreurs(TEXT("Ce nom est déjà utilisé")); + return false; } if (prog_verif.active() && overlap(prog_verif)) { // Chevauchement des horaires : // Vérifier qu'on n'a pas programmé plusieurs fois la même chaîne au même moment : - if (!modif && cleChaine==prog_verif.cleChaine && isMultiplex()==prog_verif.isMultiplex()) { + if (cleChaine==prog_verif.cleChaine && isMultiplex()==prog_verif.isMultiplex()) { affiche_erreurs( tstr_printf( TEXT("Chevauchement des horaires avec \"%s\", qui concerne la même chaîne !"), @@ -924,7 +926,7 @@ prog.tache = IsDlgButtonChecked(hDlg, IDC_TACHE) == BST_CHECKED ? planif_ajout: planif_sans; - return prog.verifie(modif); + return true; } /** @@ -1227,7 +1229,7 @@ Programme & prog = Programmes[selection]; Programme newprog = prog; - if (dlgToProg(hDlg, newprog, true)) { + if (dlgToProg(hDlg, newprog, true) && prog.verifie(&prog)) { // Récupération et vérification données du dialogue if (prog.etat == epr_encours) @@ -1254,7 +1256,7 @@ Programme prog; // Récupération des données de l'enregistrement depuis la boîte de dialogue - if (!dlgToProg(hDlg, prog, false)) + if (!dlgToProg(hDlg, prog, false) || !prog.verifie()) return FALSE; strcpy_T(selProgNom, prog.nom); Modifié: trunk/recprog.h =================================================================== --- trunk/recprog.h 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/recprog.h 2009-05-27 23:25:14 UTC (rev 186) @@ -100,13 +100,14 @@ /** * \brief Vérification de la validité de la programmation * - * \param[in] modif Mettre à \p true si on est en train de modifier une programmation + * \param[in] prog_modif Si non NULL, pointeur sur la programmation qu'on modifie (pour + * éviter de la comparer à elle-même lors des tests de recouvrement) * \retval \p true ou \p false selon succès ou échec, respectivement * \todo Ne plus interdire les programmations incompatibles pour cause de recouvrement * d'horaires. Se contenter de produire un avertissement qui peut être ignoré (laissant * ainsi à l'utilisateur la possibilité de résoudre l'incompatibilité a posteriori). **/ - bool verifie(bool modif) const; + bool verifie(const Programme * prog_modif=NULL) const; /** * \brief Calcul du temps restant avant début enregistrement en millisecondes. Modifié: trunk/rendering.cpp =================================================================== --- trunk/rendering.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/rendering.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -224,7 +224,7 @@ InvalidateRect(hMainWnd, &sRefs, TRUE); } -/// Appel d'invalidation du rectangle d'affichage de cet objet OSD +/// Appel d'invalidation du rectangle d'affichage de cet objet OSD /// en vue de provoquer sa réactualisation ; /// traitement variable selon le type de VMR effectivement utilisé. void COsdObject::Invalidate() @@ -417,7 +417,7 @@ cBotLeft.Paint(hDC); } -/// Appel d'invalidation du rectangle d'affichage de tous les objets OSD +/// Appel d'invalidation du rectangle d'affichage de tous les objets OSD /// en vue de provoquer leur réactualisation ; /// traitement variable selon le type de VMR effectivement utilisé. void COsdAllObjects::Invalidate() @@ -756,7 +756,7 @@ class CVideoMixingRenderer9 : public CVideoMixingRenderer { CComPtr pVMR9Control; //!< Interface de contrôle - CComPtr pBMP; //!< Interface de transfert du bitmap + CComPtr pBMP; //!< Interface de transfert du bitmap HBITMAP hBmp; //!< Bitmap utilisé pour l'OSD HDC hdcBmp; //!< "Device context" associé au bitmap SIZE sBmpSize; //!< Dimensions actuelle du bitmap incrusté @@ -1185,7 +1185,7 @@ #ifndef BILINEAR_FILTERING { // Request point filtering (instead of bilinear filtering) - // to improve the text quality. In general, if you are + // to improve the text quality. In general, if you are // not scaling the app image, you should use point filtering. // This is very important if you are doing source color keying. CComQIPtr pMix(*this); @@ -1203,7 +1203,7 @@ } } #endif - + // Get alpha-blended bitmap interface hr = QueryInterface(&pBMP); @@ -1436,7 +1436,7 @@ HRESULT hr = pBMP->SetAlphaBitmap(&bmpInfo); - myprintf(TEXT("%?Échec SetAlphaBitmap (ClearOsd) hr=0x%08x\n"), FAILED(hr), hr); + myprintf(TEXT("%?Échec SetAlphaBitmap (ClearOsd) hr=0x%08x\n"), FAILED(hr), hr); // Effacement du bitmap qui était conservé en mémoire : ClearBitmap(); @@ -1506,6 +1506,10 @@ #endif if (SUCCEEDED(hr) && eState==State_Running) hr = graph_Run(); + } else { + // Échec de l'initialisation du VMR + delete pVMR; + pVMR = NULL; } } else hr = E_OUTOFMEMORY; Modifié: trunk/res.rc =================================================================== --- trunk/res.rc 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/res.rc 2009-05-27 23:25:14 UTC (rev 186) @@ -145,21 +145,23 @@ CAPTION "Configuration" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Équipement de réception TV",IDC_STATIC,7,3,276,55 + GROUPBOX "Équipement de réception TV",IDC_STATIC,7,3,276,70 LTEXT "Tuner TNT",IDC_STATIC,14,17,55,12,SS_CENTERIMAGE COMBOBOX IDC_COMBO_TUNER,76,17,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Récepteur TNT",IDC_STATIC,14,37,55,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO_RECEIVER,76,37,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Codecs vidéo",IDC_STATIC,7,63,276,55 - LTEXT "Codec MPEG2",IDC_STATIC,14,77,55,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO_MPEG2,76,77,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Codec H264",IDC_COMBO_H264_S,14,97,55,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO_H264,76,97,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Codecs audio",IDC_STATIC,7,123,276,55 - LTEXT "Codec MPEG2",IDC_STATIC,14,137,55,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO_AUDIO,76,137,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Codec AC3",IDC_STATIC,14,157,55,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO_AC3,76,157,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Récepteur TNT",IDC_STATIC,16,35,55,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_RECEIVER,76,35,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Mode alternatif (pour les tuners qui ne fonctionnent qu'avec les versions précédentes du programme)",IDC_ALT_GRAPH, + "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,16,52,258,16 + GROUPBOX "Codecs vidéo",IDC_STATIC,7,78,276,48 + LTEXT "Codec MPEG2",IDC_STATIC,14,89,55,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_MPEG2,76,89,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Codec H264",IDC_COMBO_H264_S,14,107,55,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_H264,76,107,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Codecs audio",IDC_STATIC,7,131,276,47 + LTEXT "Codec MPEG2",IDC_STATIC,14,141,55,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_AUDIO,76,141,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Codec AC3",IDC_STATIC,14,159,55,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_AC3,76,159,200,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "OK",IDOK,88,193,54,14,WS_GROUP PUSHBUTTON "Annuler",IDCANCEL,148,193,54,14 END @@ -438,20 +440,23 @@ CAPTION "Options de recherche de fréquences" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Ajustements spécifiques au tuner",IDC_STATIC,7,3,192,37 - EDITTEXT IDC_TUNER_OFFSET,14,18,40,14,ES_CENTER | ES_AUTOHSCROLL | WS_GROUP - CONTROL "",IDC_TUNER_OFFSET_UPDOWN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,43,18,11,14 - LTEXT "Correction de fréquence (kHz)",IDC_STATIC,60,17,56,16,NOT WS_GROUP - CONTROL "Aligner sur des multiples de 2 kHz",IDC_TUNER_ALIGN_EVEN, - "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,122,17,76,16 - GROUPBOX "Analyse du signal",IDC_STATIC,7,40,192,76 + GROUPBOX "Ajustements spécifiques au tuner",IDC_STATIC,7,3,192,30 + EDITTEXT IDC_TUNER_OFFSET,14,14,40,14,ES_CENTER | ES_AUTOHSCROLL | WS_GROUP + CONTROL "",IDC_TUNER_OFFSET_UPDOWN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,43,14,11,14 + LTEXT "Correction de fréquence (kHz)",IDC_STATIC,60,13,56,16,NOT WS_GROUP + CONTROL "Si échec, essayer décalage +5 kHz",IDC_TRY_PLUS5KHZ, + "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,122,13,76,16 + GROUPBOX "Analyse du signal",IDC_STATIC,7,34,192,82 + EDITTEXT IDC_SCAN_DELAY1,14,45,40,14,ES_CENTER | ES_AUTOHSCROLL + CONTROL "",IDC_SCAN_DELAY1_UPDOWN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,44,45,11,14 + LTEXT "Temps avant test de présence et verrouillage du signal (millisecondes)",IDC_STATIC,60,44,132,16,NOT WS_GROUP CONTROL "Ne pas se fier à l'indicateur de présence du signal",IDC_SCAN_IGNORE_PRESENCE, - "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,14,52,178,10 + "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,14,63,178,10 CONTROL "Ne pas se fier à l'indicateur de signal verrouillé",IDC_SCAN_IGNORE_LOCK, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,66,178,10 - EDITTEXT IDC_SCAN_DELAY,14,82,40,14,ES_CENTER | ES_AUTOHSCROLL - CONTROL "",IDC_SCAN_DELAY_UPDOWN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,43,82,11,14 - LTEXT "Temps de stabilisation avant test qualité du signal et analyse (millisecondes)",IDC_STATIC,60,81,132,16,NOT WS_GROUP + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,74,178,10 + EDITTEXT IDC_SCAN_DELAY2,14,86,40,14,ES_CENTER | ES_AUTOHSCROLL + CONTROL "",IDC_SCAN_DELAY2_UPDOWN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,43,86,11,14 + LTEXT "Temps de stabilisation avant test qualité du signal et analyse (millisecondes)",IDC_STATIC,60,85,132,16,NOT WS_GROUP CONTROL "Ne pas se fier à l'indicateur de qualité du signal",IDC_SCAN_IGNORE_QUALITY, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,102,178,10 COMBOBOX IDC_SCAN_OFFSETS,14,122,60,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP @@ -469,8 +474,9 @@ EDITTEXT IDC_AUTONUM_DUPLICATE,209,96,40,14,ES_CENTER | ES_AUTOHSCROLL | WS_GROUP CONTROL "",IDC_AUTONUM_DUPLICATE_UPDOWN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,241,96,11,14 LTEXT "Valeur à ajouter en cas de conflit de numérotation sur deux chaînes",IDC_STATIC,255,95,125,16,NOT WS_GROUP - DEFPUSHBUTTON "OK",IDOK,251,121,50,14,WS_GROUP - PUSHBUTTON "Annuler",IDCANCEL,333,121,50,14 + PUSHBUTTON "Valeurs par défaut",IDC_SCAN_DEFAULT,160,121,94,14 + DEFPUSHBUTTON "OK",IDOK,268,121,50,14,WS_GROUP + PUSHBUTTON "Annuler",IDCANCEL,332,121,50,14 END IDD_SCAN_FREQS DIALOGEX 0, 0, 248, 90 Modifié: trunk/resource.h =================================================================== --- trunk/resource.h 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/resource.h 2009-05-27 23:25:14 UTC (rev 186) @@ -27,6 +27,7 @@ #define IDD_SCAN_OPTIONS 135 #define IDD_SCAN_FREQS 136 +#define IDC_DONTSHOWAGAIN 1000 #define IDC_COMBO_TUNER 1001 #define IDC_COMBO_RECEIVER 1002 #define IDC_COMBO_MPEG2 1003 @@ -34,6 +35,7 @@ #define IDC_COMBO_AUDIO 1005 #define IDC_COMBO_AC3 1006 #define IDC_COMBO_H264_S 1007 // temporaire +#define IDC_ALT_GRAPH 1008 #define IDC_SIGNAL_PRESENT 1010 #define IDC_SIGNAL_LOCK 1011 #define IDC_SIGNAL_STRENGTH 1012 @@ -127,6 +129,7 @@ #define IDC_AUTONUM_UNDEF_UPDOWN 1131 #define IDC_AUTONUM_DUPLICATE_UPDOWN 1132 #define IDC_AUTONUM_DUPLICATE 1133 +#define IDC_SCAN_DEFAULT 1134 #define IDC_SCAN_INCREMENTAL 1135 #define IDC_SCAN_KEEPPREFS 1136 #define IDC_SCAN_FULL 1137 @@ -134,9 +137,12 @@ #define IDC_TUNER_OFFSET 1140 #define IDC_TUNER_OFFSET_UPDOWN 1141 -#define IDC_TUNER_ALIGN_EVEN 1142 -#define IDC_SCAN_DELAY 1145 -#define IDC_SCAN_DELAY_UPDOWN 1146 +// #define IDC_TUNER_ALIGN_EVEN 1142 +#define IDC_TRY_PLUS5KHZ 1142 +#define IDC_SCAN_DELAY1 1143 +#define IDC_SCAN_DELAY1_UPDOWN 1144 +#define IDC_SCAN_DELAY2 1145 +#define IDC_SCAN_DELAY2_UPDOWN 1146 #define IDC_SCAN_IGNORE_PRESENCE 1147 #define IDC_SCAN_IGNORE_LOCK 1148 #define IDC_SCAN_IGNORE_QUALITY 1149 Modifié: trunk/settings.cpp =================================================================== --- trunk/settings.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/settings.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -1020,9 +1020,10 @@ BYTE res = scan_dialog(hDlg); if (res==IDABORT) - MessageBox(hDlg, + MessageBoxCheck(hDlg, TEXT("Annulation : La configuration précédente des chaînes a été rétablie"), - TEXT("Recherche annulée"), MB_ICONINFORMATION | MB_OK); + TEXT("Recherche annulée"), MB_ICONINFORMATION | MB_OK, + IDOK, TEXT("Annulation recherche chaînes")); rechercheEncours = false; remplit_liste_chaines(hListItem); } @@ -1227,28 +1228,28 @@ ScreenToClient(hListItem, &lvhti.pt); if (ListView_SubItemHitTest(hListItem, &lvhti)>=0 && lvhti.iSubItem==CHAN_COL_STATE) { - // Change l'état de la chaîne : Active / Inactive / Préférée - static const struct Tab_states { - LPCTSTR nom; - UINT uID; - } t_states[] = { - {TEXT("&Inactive"), IDM_CHAN_INACTIVE}, - {TEXT("&Active"), IDM_CHAN_ACTIVE}, - {TEXT("&Préférée"), IDM_CHAN_PREFERRED} - }; - EtatChaine etat = ItemToEtat(hListItem, lvhti.iItem); - HMENU pop = CreatePopupMenu(); - for (i=0; i<_countof(t_states); i++) { - const Tab_states e_stat = t_states[i]; + // Change l'état de la chaîne : Active / Inactive / Préférée + static const struct Tab_states { + LPCTSTR nom; + UINT uID; + } t_states[] = { + {TEXT("&Inactive"), IDM_CHAN_INACTIVE}, + {TEXT("&Active"), IDM_CHAN_ACTIVE}, + {TEXT("&Préférée"), IDM_CHAN_PREFERRED} + }; + EtatChaine etat = ItemToEtat(hListItem, lvhti.iItem); + HMENU pop = CreatePopupMenu(); + for (i=0; i<_countof(t_states); i++) { + const Tab_states e_stat = t_states[i]; - AppendMenu(pop, i==etat ? MF_STRING|MF_CHECKED : MF_STRING, - e_stat.uID, e_stat.nom); - } - iItemEdit = lvhti.iItem; // se souvenir quel item on traite - TrackPopupMenuEx(pop, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, hDlg, NULL); + AppendMenu(pop, i==etat ? MF_STRING|MF_CHECKED : MF_STRING, + e_stat.uID, e_stat.nom); + } + iItemEdit = lvhti.iItem; // se souvenir quel item on traite + TrackPopupMenuEx(pop, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, hDlg, NULL); - DestroyMenu(pop); - } + DestroyMenu(pop); + } break; } } return FALSE; @@ -1376,6 +1377,10 @@ // Vérifie si des paramètres ont été changés, et récupère les nouvelles versions changed |= extrait_combo(GetDlgItem(hDlg, IDC_COMBO_RECEIVER), nom_receiver, _countof(nom_receiver), false); + if (get_check(hDlg, IDC_ALT_GRAPH)!=autre_graphe) { + autre_graphe = !autre_graphe; + changed = true; + } changed |= extrait_combo(GetDlgItem(hDlg, IDC_COMBO_MPEG2), filtreMPEG2, _countof(filtreMPEG2), true); #if WITH_H264 changed |= extrait_combo(GetDlgItem(hDlg, IDC_COMBO_H264), filtreH264, _countof(filtreH264), true); @@ -1389,12 +1394,13 @@ #if WITH_H264 if (changed && _tcsstr(filtreMPEG2, TEXT("ffdshow")) && _tcsstr(filtreH264, TEXT("ffdshow"))) { - MessageBox(hDlg, + MessageBoxCheck(hDlg, TEXT("L'utilisation du codec « ffdshow » pour, en même temps, les filtres MPEG2 ") TEXT("et H264, n'est possible que si ce codec est configuré pour accepter les ") TEXT("instances multiples, ce qui n'est PAS le cas par défaut. Une erreur 0x80004005 ") TEXT("se produira en cas de mauvaise configuration."), - TEXT("Avertissement concernant le codec « ffdshow »"), MB_ICONWARNING); + TEXT("Avertissement concernant le codec « ffdshow »"), MB_OK|MB_ICONWARNING, + MB_OK, TEXT("Avertissement ffdshow")); } #endif return changed; @@ -1430,6 +1436,11 @@ HWND hH264 = GetDlgItem(hDlg, IDC_COMBO_H264); HWND hAudio = GetDlgItem(hDlg, IDC_COMBO_AUDIO); HWND hAc3 = GetDlgItem(hDlg, IDC_COMBO_AC3); + + set_check(hDlg, IDC_ALT_GRAPH, autre_graphe); + + // Liste des filtres définis dans la configuration mais qui ne sont plus disponibles + // sur l'ordinateur : tstring strListeAbsents; if (!remplit_combo_tuner(hTuner, KSCATEGORY_BDA_NETWORK_TUNER, nom_tuner)) @@ -1488,6 +1499,7 @@ case _cmd_(IDC_COMBO_H264, LBN_SELCHANGE): case _cmd_(IDC_COMBO_AUDIO, LBN_SELCHANGE): case _cmd_(IDC_COMBO_AC3, LBN_SELCHANGE): + case _cmd_(IDC_ALT_GRAPH, BN_CLICKED): PropSheet_Changed(GetParent(hDlg), hDlg); break; @@ -1645,7 +1657,8 @@ case WM_INITDIALOG: // Initialisation de la fenêtre SetDlgItemInt(hDlg, IDC_TUNER_OFFSET, offset_tuner, TRUE); - set_check(hDlg, IDC_TUNER_ALIGN_EVEN, use_even_frequencies); + // set_check(hDlg, IDC_TUNER_ALIGN_EVEN, use_even_frequencies); + set_check(hDlg, IDC_TRY_PLUS5KHZ, try_adding_5khz); SendDlgItemMessage(hDlg, IDC_TUNER_OFFSET_UPDOWN, UDM_SETRANGE, 0, MAKELPARAM((short)999, (short)-999)); @@ -1653,26 +1666,30 @@ set_check(hDlg, IDC_SCAN_IGNORE_LOCK, scan_ignore_lock); set_check(hDlg, IDC_SCAN_IGNORE_QUALITY, scan_ignore_quality); - SetDlgItemInt(hDlg, IDC_SCAN_DELAY, (UINT)delai_tuner, TRUE); - SendDlgItemMessage(hDlg, IDC_SCAN_DELAY_UPDOWN, UDM_SETRANGE, 0, + SetDlgItemInt(hDlg, IDC_SCAN_DELAY1, (UINT)delai_tuner1, TRUE); + SendDlgItemMessage(hDlg, IDC_SCAN_DELAY1_UPDOWN, UDM_SETRANGE, 0, + MAKELPARAM((short)999, (short)0)); + + SetDlgItemInt(hDlg, IDC_SCAN_DELAY2, (UINT)delai_tuner2, TRUE); + SendDlgItemMessage(hDlg, IDC_SCAN_DELAY2_UPDOWN, UDM_SETRANGE, 0, MAKELPARAM((short)9999, (short)0)); if (methode_recherche>=sm_incremental) CheckRadioButton(hDlg, IDC_SCAN_INCREMENTAL, IDC_SCAN_FULL, IDC_SCAN_INCREMENTAL-sm_incremental+methode_recherche); - SetDlgItemInt(hDlg, IDC_AUTONUM_UNDEF, (UINT)autonum_undef, TRUE); SendDlgItemMessage(hDlg, IDC_AUTONUM_UNDEF_UPDOWN, UDM_SETRANGE, 0, MAKELPARAM((short)950, (short)1)); + SetDlgItemInt(hDlg, IDC_AUTONUM_UNDEF, (UINT)autonum_undef, TRUE); - SetDlgItemInt(hDlg, IDC_AUTONUM_DUPLICATE, (UINT)autonum_duplicate, TRUE); SendDlgItemMessage(hDlg, IDC_AUTONUM_DUPLICATE_UPDOWN, UDM_SETRANGE, 0, MAKELPARAM((short)950, (short)10)); + SetDlgItemInt(hDlg, IDC_AUTONUM_DUPLICATE, (UINT)autonum_duplicate, TRUE); InitOffsetsCombo(use_offsets); return TRUE; case WM_NOTIFY: - if (wParam==IDC_SCAN_DELAY_UPDOWN) { + if (wParam==IDC_SCAN_DELAY2_UPDOWN) { NMUPDOWN & sUpDn = *LPNMUPDOWN(lParam); // Multiplier le coefficient de défilement par 10 sur le délai de stabilisation @@ -1686,6 +1703,29 @@ case WM_COMMAND: switch (wParam) { + case _cmd_(IDC_SCAN_DEFAULT, BN_CLICKED): + if (MessageBox(hDlg, + TEXT("Tous les paramètres de cette page vont être réinitialisés à leur valeur par défaut.\n") + TEXT("Confirmez-vous cette demande ?"), + TEXT("Confirmation réinitialisation"), MB_YESNO)==IDYES) + { + SetDlgItemInt(hDlg, IDC_TUNER_OFFSET, 0, TRUE); + set_check(hDlg, IDC_TRY_PLUS5KHZ, INI_TRY_ADDING_5KHZ_DEFAULT); + set_check(hDlg, IDC_SCAN_IGNORE_PRESENCE, false); + set_check(hDlg, IDC_SCAN_IGNORE_LOCK, false); + set_check(hDlg, IDC_SCAN_IGNORE_QUALITY, false); + + SetDlgItemInt(hDlg, IDC_SCAN_DELAY1, (UINT)INI_DELAI_TUNER1_DEFAULT, TRUE); + SetDlgItemInt(hDlg, IDC_SCAN_DELAY2, (UINT)INI_DELAI_TUNER2_DEFAULT, TRUE); + CheckRadioButton(hDlg, IDC_SCAN_INCREMENTAL, IDC_SCAN_FULL, + IDC_SCAN_INCREMENTAL-sm_incremental+INI_METHODE_RECH_DEFAULT); + + SetDlgItemInt(hDlg, IDC_AUTONUM_UNDEF, (UINT)INI_AUTONUM_UNDEF_DEFAULT, TRUE); + SetDlgItemInt(hDlg, IDC_AUTONUM_DUPLICATE, (UINT)INI_AUTONUM_DUP_DEFAULT, TRUE); + SendDlgItemMessage(hDlg, IDC_SCAN_OFFSETS, CB_SETCURSEL, INI_USE_OFFSETS_DEFAULT, 0); + } + return TRUE; + case _cmd_(IDCANCEL, BN_CLICKED): EndDialog(hDlg, IDCANCEL); return TRUE; @@ -1694,8 +1734,10 @@ // Transfert des options depuis les items de la boîte de dialogue vers // les variables respectives qui les concernent get_int(hDlg, IDC_TUNER_OFFSET, offset_tuner, TRUE); - use_even_frequencies = get_check(hDlg, IDC_TUNER_ALIGN_EVEN); - get_int(hDlg, IDC_SCAN_DELAY, delai_tuner, FALSE); + // use_even_frequencies = get_check(hDlg, IDC_TUNER_ALIGN_EVEN); + try_adding_5khz = get_check(hDlg, IDC_TRY_PLUS5KHZ); + get_int(hDlg, IDC_SCAN_DELAY1, delai_tuner1, FALSE); + get_int(hDlg, IDC_SCAN_DELAY2, delai_tuner2, FALSE); get_int(hDlg, IDC_AUTONUM_UNDEF, autonum_undef, FALSE); get_int(hDlg, IDC_AUTONUM_DUPLICATE, autonum_duplicate, FALSE); scan_ignore_presence = get_check(hDlg, IDC_SCAN_IGNORE_PRESENCE); Modifié: trunk/utils.cpp =================================================================== --- trunk/utils.cpp 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/utils.cpp 2009-05-27 23:25:14 UTC (rev 186) @@ -127,6 +127,20 @@ } /** + * Conversion des coordonnées d'un rectangle contenant des coordonnées relatives à l'écran en un rectangle + * contenant des coordonnées relatives au rectangle client d'une fenêtre. + * \param[in] hWnd "Handle" d'une fenêtre dont le rectangle client sera utilisé pour la conversion + * \param[in,out] sRect Rectangle dont les coordonnées seront converties + **/ +BOOL ScreenToClient(HWND hWnd, RECT & sRect) +{ + POINT sPnt = {0, 0}; + BOOL bRes = ScreenToClient(hWnd, &sPnt); + + return bRes && OffsetRect(&sRect, sPnt.x, sPnt.y); +} + +/** * Génération d'une chaîne formatée (format \p printf) avec résultat dans une chaîne \p tstring **/ tstring tstr_printf(LPCTSTR pszFmt, ...) Modifié: trunk/utils.h =================================================================== --- trunk/utils.h 2009-05-27 23:17:02 UTC (rev 185) +++ trunk/utils.h 2009-05-27 23:25:14 UTC (rev 186) @@ -459,6 +459,24 @@ }; /** + * Conversion des coordonnées d'un rectangle contenant des coordonnées relatives à l'écran en un rectangle + * contenant des coordonnées relatives au rectangle client d'une fenêtre. + * \param[in] hWnd "Handle" d'une fenêtre dont le rectangle client sera utilisé pour la conversion + * \param[in,out] sRect Rectangle dont les coordonnées seront converties + **/ +BOOL ScreenToClient(HWND hWnd, RECT & sRect); + +/** + * Obtenir le rectangle de position d'une fenêtre en coordonnées relatives à celles de sa fenêtre parente + * \param[in] hWnd Fenêtre dont les coordonnées sont à récupérer + * \param[out] sRect Rectangle recevant les coordonnées résultantes + **/ +inline BOOL GetChildWindowRect(HWND hWnd, RECT & sRect) +{ + return GetWindowRect(hWnd, &sRect) && ScreenToClient(GetParent(hWnd), sRect); +} + +/** * Structure servant à décrire les colonnes devant être ajoutées dans la liste */ struct Tab_cols { From pouchintv-dev at baysse.fr Thu May 28 01:43:57 2009 From: pouchintv-dev at baysse.fr (=?iso-8859-1?q?Liste_utilis=E9e_par_les_d=E9veloppeurs?=) Date: Thu, 28 May 2009 01:43:57 +0200 (CEST) Subject: [Pouchintv-dev] [PouchinTVMod] gingko | r185 - log changed Message-ID: <20090527234357.5A9995F391@mail.baysse.fr> Author: gingko Date: 2009-05-28 01:17:02 +0200 (jeu, 28 mai 2009) Revision: 185 - Log changed New log: Généralisation du script de génération des programmes d'installation à toutes les versions. Program_Install.nsi, Setup_200#.vcproj, Pouchin TV_200#.sln, Lisez-moi (setup).txt: * Le script permet maintenant de générer des fichiers d'installation pour les versions Debug, SBCS et Debug+SBCS. Divers : - Remplacement et renommage de l'icône de la chaîne suisse SF 1. =================================================================== Old log: GGénéralisation du script de génération des programmes d'installation à toutes les versions. Program_Install.nsi, Setup_200#.vcproj, Pouchin TV_200#.sln, Lisez-moi (setup).txt: * Le script permet maintenant de générer des fichiers d'installation pour les versions Debug, SBCS et Debug+SBCS. Divers : - Remplacement et renommage de l'icône de la chaîne suisse SF 1.