Changelog:
v2.32
Added a lot more logging of the MAME executable location process in FilePaths. I have done this in order to assist with major problems in the MacOS distributable version of pfeMAME no longer getting the right responses from subprocess when trying to run MAME from the system path rather than an absolute path.
Modified the method used to find the MAME executable when auto-finding to try and be a bit more robust for MacOS.
Simplified the icon code for the main menu
Simplified the on_control_changed code in alternate emulator engines
Fixed bug in panelslots.py that was generating bios names for all machine types for the selected system, rather that the specific system machine type (i.e. list was way too long and selections could be incorrect for the actual system)
Simplified and made more pythonic a number of other sections of code in panelslots.py
Fixed bugs in panelslots
Fixed bug that would cause a crash for systems that don’t have a bios option
Added a first bios option to be a blank field which is possible for some systems
Fixed bug that would prevent you from being able to default or empty slots for systems that you are configuring for the first time
Fixed bug that would stop you from clearing a single line in slot options
After closing the alternate_emulators window, the XML file is reloaded to update the alternate emulator data in memory. This way you shouldn’t have to restart pfeMAME but you will have to refresh the database to see the changes.
The Tile View filter (All of Favorites) is now set based on the value from the Main View. You can still toggle it when in Tile View.
Updated the non mame defaults XML file to include additional command line options for visual pinball that send it to the background and fully close when the table exits. Much better for non-keyboard implementations.
Added a feature to allow all ROMs tagged as a favorite to be exported to a selected folder. Can be found in the ‘File’ menu.
Added a new preference setting to set the main window Fullscreen on startup
Added a new preference setting to recall the main view ROMs list columns widths on startup. Whatever they were when the application was last closed will be recalled.
Updated the preferences window to expand vertically to use available space.
Fixed issue with the joystick code causing high CPU usage. By default the polling is set to maximum speed (0 delay) which chews up to 20% CPU which is ridiculous. Have set to 50 which is just fine.
Added a set-focus event so that when changing the filtered view for the main list, the list is selected for focus so you can start scrolling without having to first click into the window. At the same time I force the visible row back to ZERO to ensure that a row is aways selected.
Had to change the get checkbox controlls code as for some reason I don’t currently understand, its causing errors in python 3.13. Also moved it to a function as its used in 3 different places.
Fixed a bug in the code that recalled the last ROM selected. For systems this would work if the first system ROM was the top level system (e.g. ZX Spectrum) and then the next ROM after that was the program you wanted to run. This would not work if the first system was the system and also the ROM (e.g. pinball tables).
Significant improvement to how the mame history file was loaded into memory and then searched on the fly. Previously done in a list which was then iterated through for searching using pure python. Have moved to keeping it in one massive string and using the inbuilt ‘find’ which is in C so a heck of a lot faster. We’re talking x10 speed improvement on a fast system. I would expect slower systems to be even better. The net result is that scrolling through ROMs will be just that little bit faster now. IMPORTANT: At the same time I have dropped the legacy support for the older history.dat file. Only the XML file is now supported.
Updated the manual – please read it if this is your first time using this application.
Fixed a bug in alternate emulator engines when using the set defaults feature that would cause an error if you didn’t select any engine types. Also fixed a bug in the same custom dialog that would return an wx.ID_OK event even if you pressed ESC or closed the dialog without selecting anything in the drop-down.
v2.31
Added some additional debug logging if developer mode is active
Enabled VLC to be used for MacOS. Have tested on Intel silicon only. Seems to work ok ish.
Fixed an issue with the selected row text color not taking user changes
Added the ability to change the selected row background color. This was locked to the system default. Have also changed the default to something more pleasant (imho).
Fixed a MacOS console warning relating to the vertical size of the joystick selection combobox in preferences. Just changed the vertical size to system default.
Changed the tabs background area color to the control bar color for all tabbed controls. This allows for better contrast and ‘view ability’, especially in dark mode.
Changed the way the MAME executable is looked for in Filapaths. I was previously incorrectly assuming that only Linux required it to be located in the system path (So that you can just run MAME from the command line and it works regardless of what the current folder is). As I have found out, some installs under MacOS install it in the system path rather than just in a folder (e.g. MacPorts). The new change looks for the executable firstly as a file in the folder you have set as the MAME folder. If it can’t find it there then it checks to see if it’s in the system path. If it still can’t find it, then you will just need to find it yourself.
Made the RED background highlight around the filepaths icon flash to make it more obvious for first time setup that the filepaths are where you need to start.
Added by build_source_distribution.py file to the source distributions
The python modules ffmpeg-python and python-vlc are now compulsory if you are building a distribution executable. This ensures that the required include files are added to the build.
Fixed duplicate message logging after auto-restart
Updated the manual to include detail in the Full Screen Video Player section relating to displaying metadata needing ffprobe (of ffmpeg for Linux)
Fixed an issue where the buttons at the bottom of the Filepaths window were greyed out in some situations (They were still useable, but the GUI needed to be refreshed to redraw them correctly)
Fixed a bug that would cause Filepaths to crash out if you had selected ‘Clear All’ and then re-run it without setting the INI path to a valid path.
In Filepaths, any invalid or missing paths are highlighted RED. This doesn’t mean it’s a critical issue, just that this particular path is not set.
Improved MacOS ability to find the ffprobe application that you should copy to the pfeMAME folder.
Fixed a bug that could cause a KeyError on some video files when trying to get matadata that isn’t present or the file is not formatted correctly.
Fixed a crash that would occur when using the Fullscreen video player under MacOS. Not a Mac bug, but I wasn’t handling a send to the main screen messages window correctly. Doing it from a thread in a non-thread-safe manner was a bad idea. Have used wx.CallAfter now to correct this. Pretty big oversight.
Updated the manual based on recent changes and added improved detail around the Full Screen Video Player ffprobe support.
Fixed a major bug that was causing Linux installs to save the pfeMAME.ini file in the wrong path when setting up file paths. This then stopped the file paths process from working. Seems it was specific to certain builds and configuration types as I had not seen it previously.
v2.30
Fixed a bug that was preventing the Check All Roms module from running. I hadn’t updated its code to follow the new logging structure.
Added a refresh after showing the busywindow when calling mame to get the -listxml as under Linux the busywindow would not always show.
Fixed an issue under Linux where the auto-restart (if it works) would throw an error relating to an unrecognized command line variable. This was due to the change I introduced previously on how the CLI is managed.
Improved the showing of the media player in the main screen under Linux (if you’re using X.Org, not Wayland as that’s broken still).
The manual has been updated with more modern instructions for installing wxPython under Linux (Only tested on Ubuntu and it will differ for non-Debian OS’s.
In TileView I have noved the keypress and mouse click binding from the tiles to the mainframe. This better manages problems where the tiles may loose focus and not respond.
The inactivity timer was not being reset during searching. This means that if you were just searching for a long time without then clicking on anything, the fullscreen video player could kick in automatically.
Fixed a bug that was causing the search function to not pick up on the first character until the 2nd character was being entered. Had to switch to using the wx.searchctrl which just handles things a lot better.
Fixed a bug where when searching, each character entry would cause the ROM list to be repopulated twice.
Greatly reduced the number of times the ROM list gets updated on startup.
Finally fixed the annoying linter issue in functions.py. It wasn’t happy about not seeing the _ declaration for the language settings.
Did a better job of passing back variables from the joystick setup function
Added a feature in the setup.py file for Linux builds where it will automatically search for and copy some dependency Linux Libraries that are not always present on Linux builds (e.g. libsdl and libtiff).
Tidied up the setup file a bit
Simplified some unnecessary code in the alternateemulators.py file
Moved the UltimateHeaderRenderer code to functions.py as it was used across three different modules
Patched ultimatelistctrl to allow the currently selected row foreground color to be adjusted. This is not possible by default and causes for some horrible contrast issues.
Added the color control to pfeMAME preferences window to allow the selected row color to be changed.
Fixed tooltips not being displayed for rows in the ROMs list that have text too long to be displayed in the cell. Now when you hover over the cell a tooltip will pop up showing the full text. Needed to add an event.skip() to the mouse motion event as this was blocking the propagation of this event for the ultimatelistctrl hover detection.
Added error / info logging to the fullscreen video player
Created a non_mame_defaults xml file and added functionality in the alternate emulators window to select defaults which helps with making the right detault settings for various emulators. The XML file can be added to over time based on others that I test or feedback from other users.
Fixed a problem that was causing a crash in Linux with the fullscreenvideo player with Wayland when using the wx.mediactrl. The Gstreamer buffer / stream (whatever it is) wasn’t getting flushed after each video and everything would fall apart. I think this is an issue with wx.mediactrl. For now I am destroying the control and re-creating it each time a new video plays.
Implemented the same as above in pfeMAME.py
Implemented the same as above in tileview.py
Added a ‘Check for Wayland’ checkbox to the preferences window. On startup under linux this will be checked. You can optionally disable this after the first time at the prompt, or from the preferences window.
Added a new preferences option to ‘Disable artwork for all ROMs’. Does pretty much as it says.
Fixed a bug that would stop the ROMs list from regaining focus when switching to a different tab and then back again.
Added a check when opening the ‘CheckAll’ window that the File Path for the ROMs folder is valid.
Updated rungame to log the correct engine being used (was always logging as MAME even if you were not using it)
Tidied up how the delimiter is shown in the messages window after running a ROM
Fixed an issue that caused preferences to be written when opening any of the preferences windows when they should only be written if a control is actually changed
Refactored some of the preferences control update code to tidy it up and make a lot easier to maintain.
Fixed a bug that stopped manual configuration data in SLOT configs from ever being written to file as it didn’t realise the control had changed.
Database age was being shown as 0 days if the preference to not check on startup was checked. Changed this so that preference only effects if you are notified of the age. Now the age is always shown as the correct value.
Added a Unbind in on_close to the on_paint event in TileView to prevent Runtime errors being generated when the on_paint tried to paint to a device that had been destroyed during the closing process. Only happened under some situations but better to prevent it.
When using the language picker, the currently selected language now has a border drawn around it so you know what is already selected.
Atualizações:
v2.32
Adicionado muito mais logging do processo de localização do executável do MAME em FilePaths. Isso foi feito para ajudar com problemas graves na versão distribuível para MacOS do pfeMAME, que não estava mais recebendo as respostas corretas do subprocesso ao tentar rodar o MAME a partir do caminho do sistema, em vez de um caminho absoluto.
Modificado o método usado para encontrar o executável do MAME ao procurar automaticamente, tentando ser um pouco mais robusto para MacOS.
Simplificado o código do ícone para o menu principal.
Simplificado o código de on_control_changed nos motores de emuladores alternativos.
Corrigido um bug em panelslots.py que estava gerando nomes de BIOS para todos os tipos de máquinas para o sistema selecionado, em vez de para o tipo específico da máquina do sistema (ou seja, a lista estava muito longa e as seleções podiam estar incorretas para o sistema real).
Simplificado e tornado mais pythonico várias outras seções de código em panelslots.py.
Corrigidos bugs em panelslots.
Corrigido um bug que causaria uma falha para sistemas que não têm uma opção de BIOS.
Adicionada uma primeira opção de BIOS para ser um campo em branco, o que é possível para alguns sistemas.
Corrigido um bug que impediria de definir ou limpar slots para sistemas que você está configurando pela primeira vez.
Corrigido um bug que impediria a limpeza de uma única linha nas opções de slots.
Após fechar a janela alternate_emulators, o arquivo XML é recarregado para atualizar os dados do emulador alternativo na memória. Assim, você não precisará reiniciar o pfeMAME, mas terá que atualizar o banco de dados para ver as mudanças.
O filtro Tile View (Todos os Favoritos) agora é definido com base no valor da Main View. Você ainda pode alternar isso quando estiver na Tile View.
Atualizado o arquivo XML de non-MAME defaults para incluir opções de linha de comando adicionais para o Visual Pinball, que o envia para o fundo e fecha completamente quando a mesa sai. Muito melhor para implementações sem teclado.
Adicionada uma funcionalidade para permitir que todos os ROMs marcados como favoritos sejam exportados para uma pasta selecionada. Isso pode ser encontrado no menu Arquivo.
Adicionada uma nova configuração de preferências para definir a janela principal em Tela Cheia ao iniciar.
Adicionada uma nova configuração de preferências para recordar as larguras das colunas da lista de ROMs da Main View ao iniciar. O que estava quando o aplicativo foi fechado pela última vez será recordado.
Atualizada a janela de preferências para expandir verticalmente e usar o espaço disponível.
Corrigido problema com o código do joystick, que estava causando alto uso de CPU. Por padrão, a pesquisa estava configurada para a velocidade máxima (0 de delay), o que consumia até 20% da CPU, o que era excessivo. Agora está configurado para 50, o que é adequado.
Adicionado um evento de set-focus, para que, ao mudar o filtro de visualização da lista principal, a lista seja selecionada automaticamente para foco, assim você pode começar a rolar sem precisar clicar na janela primeiro. Ao mesmo tempo, forço a linha visível de volta para ZERO para garantir que uma linha seja sempre selecionada.
Foi necessário alterar o código de controle de caixas de seleção, pois por algum motivo que não entendo atualmente, ele estava causando erros no Python 3.13. Também movi isso para uma função, pois é usado em 3 lugares diferentes.
Corrigido um bug no código que lembrava o último ROM selecionado. Para sistemas, isso funcionava se o primeiro ROM do sistema fosse o sistema de nível superior (por exemplo, ZX Spectrum), e o próximo ROM após isso fosse o programa que você queria executar. Isso não funcionava se o primeiro sistema fosse o sistema e também o ROM (por exemplo, mesas de pinball).
Melhoria significativa de como o arquivo de histórico do MAME era carregado na memória e depois pesquisado em tempo real. Anteriormente, isso era feito em uma lista que era percorrida para pesquisa usando Python puro. Agora, mantemos tudo em uma enorme string e usamos o comando find embutido, que está em C, portanto é muito mais rápido. A melhoria de velocidade é cerca de 10x em sistemas rápidos. Eu esperaria que sistemas mais lentos tenham ainda mais melhorias. O resultado final é que rolar pelos ROMs será um pouco mais rápido agora. IMPORTANTE: Ao mesmo tempo, removi o suporte legado para o arquivo history.dat mais antigo. Somente o arquivo XML é agora suportado.
Manual atualizado – por favor, leia se esta for sua primeira vez usando este aplicativo.
Corrigido um bug nos motores de emuladores alternativos ao usar o recurso de definir padrões, que causava um erro se você não selecionasse nenhum tipo de motor. Também corrigido um bug no mesmo diálogo personalizado que retornava um evento wx.ID_OK mesmo se você pressionasse ESC ou fechasse o diálogo sem selecionar nada no menu suspenso.
v2.31
Adicionado mais logging de depuração caso o modo de desenvolvedor esteja ativo.
Habilitado o uso do VLC no MacOS. Testado apenas em processadores Intel. Parece funcionar razoavelmente bem.
Corrigido um problema com a cor do texto da linha selecionada não refletindo as alterações feitas pelo usuário.
Adicionada a capacidade de alterar a cor de fundo da linha selecionada. Antes, isso estava bloqueado para o padrão do sistema. Também mudei o padrão para algo mais agradável (na minha opinião).
Corrigido um aviso no console do MacOS relacionado ao tamanho vertical do combobox de seleção do joystick nas preferências. Apenas alterei o tamanho vertical para o padrão do sistema.
Mudada a cor de fundo das abas para a cor da barra de controle em todos os controles com abas. Isso melhora o contraste e a “visualização”, especialmente no modo escuro.
Alterado o método de procura pelo executável do MAME em FilePaths. Anteriormente, estava assumindo incorretamente que apenas o Linux precisava que fosse localizado no caminho do sistema (para que você pudesse rodar o MAME a partir da linha de comando independentemente do diretório atual). Como descobri, algumas instalações no MacOS instalam-no no caminho do sistema, em vez de apenas em uma pasta (por exemplo, MacPorts). A nova mudança procura o executável primeiro como um arquivo na pasta que você definiu para o MAME. Se não encontrar lá, verifica se está no caminho do sistema. Se ainda não encontrar, você precisará localizá-lo manualmente.
Feito o fundo vermelho em torno do ícone de caminhos de arquivos piscar, para torná-lo mais óbvio para a configuração inicial, mostrando onde você precisa começar.
Adicionado o arquivo build_source_distribution.py nas distribuições de código-fonte.
Os módulos Python ffmpeg-python e python-vlc agora são obrigatórios se você estiver construindo um executável de distribuição. Isso garante que os arquivos de inclusão necessários sejam adicionados à construção.
Corrigido o log de mensagens duplicadas após reinicialização automática.
Manual atualizado para incluir detalhes na seção do Player de Vídeo em Tela Cheia sobre a exibição de metadados, que exige o ffprobe (do ffmpeg para Linux).
Corrigido um problema onde os botões na parte inferior da janela de caminhos de arquivos ficavam desativados em algumas situações (eles ainda estavam utilizáveis, mas a interface precisaria ser atualizada para redesenhá-los corretamente).
Corrigido um bug que causaria a falha dos FilePaths se você tivesse selecionado “Limpar tudo” e depois executasse novamente sem definir o caminho INI para um caminho válido.
Em FilePaths, qualquer caminho inválido ou ausente é destacado em vermelho. Isso não significa que seja um problema crítico, apenas que esse caminho específico não está definido.
Melhorada a capacidade do MacOS de localizar o aplicativo ffprobe que você deve copiar para a pasta do pfeMAME.
Corrigido um bug que poderia causar um KeyError em alguns arquivos de vídeo ao tentar obter metadados que não estão presentes ou quando o arquivo não está formatado corretamente.
Corrigido uma falha que ocorria ao usar o player de vídeo em tela cheia no MacOS. Não é um bug do Mac, mas eu não estava tratando corretamente o envio das mensagens para a janela principal. Fazer isso de forma insegura em uma thread foi uma ideia ruim. Agora estou usando wx.CallAfter para corrigir isso. Foi uma falha considerável.
Manual atualizado com base nas mudanças recentes e adição de detalhes aprimorados sobre o suporte ao ffprobe no player de vídeo em tela cheia.
v2.30
Corrigido um bug que impedia o módulo Check All Roms de ser executado. Não tinha atualizado o código para seguir a nova estrutura de logging.
Adicionada uma atualização após mostrar a busywindow ao chamar o MAME para obter o -listxml, pois no Linux a busywindow nem sempre aparecia.
Corrigido um problema no Linux onde o auto-restart (se funcionar) gerava um erro relacionado a uma variável de linha de comando não reconhecida. Isso aconteceu devido à mudança que fiz anteriormente sobre como o CLI é gerido.
Melhorada a exibição do media player na tela principal no Linux (se estiver usando X.Org, não Wayland, pois esse ainda está quebrado).
Manual atualizado com instruções mais modernas para instalar o wxPython no Linux (testado apenas no Ubuntu e pode variar em sistemas não Debian).
No TileView, movi o binding de teclas e cliques de mouse dos tiles para o mainframe. Isso gerencia melhor os problemas onde os tiles podem perder o foco e não responder.
O timer de inatividade não estava sendo reiniciado durante a busca. Isso significava que, se você estivesse apenas buscando por um longo tempo sem clicar em nada, o player de vídeo em tela cheia poderia ser ativado automaticamente.
Corrigido um bug que impedia a função de pesquisa de capturar o primeiro caractere até que o segundo fosse digitado. Tive que mudar para usar o wx.searchctrl, que lida muito melhor com isso.
Corrigido um bug onde cada caractere digitado na pesquisa fazia a lista de ROMs ser repopulada duas vezes.
Reduzido significativamente o número de vezes que a lista de ROMs é atualizada na inicialização.
Corrigido o problema irritante do linter em functions.py, que não estava feliz por não ver a declaração _ para as configurações de idioma.
Fiz um trabalho melhor ao passar variáveis de volta da função de configuração do joystick.
Adicionada uma funcionalidade no arquivo setup.py para builds no Linux, onde ele buscará automaticamente e copiará algumas bibliotecas de dependências do Linux que nem sempre estão presentes em builds no Linux (por exemplo, libsdl e libtiff).
Arrumado o arquivo de configuração.
Simplificado um código desnecessário no arquivo alternateemulators.py.
Movido o código UltimateHeaderRenderer para functions.py, pois é usado em três módulos diferentes.
Corrigido o ultimatelistctrl para permitir que a cor do texto da linha selecionada seja ajustada. Isso não era possível por padrão e causava problemas de contraste horríveis.
Adicionado o controle de cor na janela de preferências do pfeMAME para permitir a alteração da cor da linha selecionada.
Corrigidos os tooltips que não estavam sendo exibidos para linhas na lista de ROMs com texto muito longo para caber na célula. Agora, quando você passa o mouse sobre a célula, um tooltip será exibido mostrando o texto completo.
Adicionado log de erro/informações ao player de vídeo em tela cheia.
Criado um arquivo non_mame_defaults XML e adicionado uma funcionalidade na janela de emuladores alternativos para selecionar padrões, o que ajuda a definir as configurações corretas para vários emuladores. O arquivo XML pode ser ampliado ao longo do tempo com base nos testes ou feedback de outros usuários.
Corrigido um problema que estava causando uma falha no Linux com o player de vídeo em tela cheia no Wayland, ao usar wx.mediactrl. O buffer/stream do GStreamer não estava sendo limpo após cada vídeo e tudo começava a falhar. Isso é um problema com wx.mediactrl. Por enquanto, estou destruindo o controle e recriando-o sempre que um novo vídeo for reproduzido.
Implementado o mesmo processo em pfeMAME.py.
Implementado o mesmo processo em tileview.py.
Adicionado uma checkbox de Verificar por Wayland na janela de preferências. No Linux, isso estará marcado na inicialização. Você pode desmarcar isso após a primeira vez no prompt ou pela janela de preferências.
Adicionada uma nova opção de preferências para Desativar a arte para todos os ROMs. Faz exatamente o que diz.
Corrigido um bug que impedia a lista de ROMs de recuperar o foco ao alternar para uma aba diferente e depois voltar.
Adicionado uma verificação ao abrir a janela CheckAll para garantir que o Caminho de Arquivos para a pasta de ROMs seja válido.
Atualizado o rungame para registrar corretamente o motor sendo utilizado (antes sempre registrava como MAME, mesmo se você não estivesse usando o MAME).
Arrumado como o delimitador é exibido na janela de mensagens após executar um ROM.
Corrigido um problema que causava a escrita das preferências ao abrir qualquer uma das janelas de preferências, quando elas só deveriam ser escritas se um controle fosse realmente alterado.
Refatorado parte do código de atualização das preferências para deixá-lo mais fácil de manter.
Corrigido um bug que impedia que os dados de configuração manual nos SLOT configs fossem gravados no arquivo, pois não percebia que o controle havia sido alterado.
A idade do banco de dados estava sendo mostrada como 0 dias se a preferência de não verificar na inicialização estivesse marcada. Agora, essa preferência só afeta se você será notificado sobre a idade. Agora a idade sempre é mostrada corretamente.
Adicionado um Unbind no on_close para o evento on_paint no TileView, para evitar erros de tempo de execução quando o on_paint tentava pintar para um dispositivo destruído durante o processo de fechamento. Isso acontecia apenas em algumas situações, mas é melhor prevenir.
Ao usar o seletor de idioma, a linguagem selecionada atualmente agora tem uma borda desenhada ao redor, para que você saiba o que já está selecionado.
Comentários