Improve game import in db

This commit is contained in:
Loic Guegan 2022-12-26 16:23:14 +01:00
parent 1c2d2a14ac
commit 3263bda23b
10 changed files with 357 additions and 124 deletions

View file

@ -59,8 +59,11 @@ MainWindow::MainWindow()
NewGame(std::shared_ptr<Game>(new Game()));
// Temporary TO REMOVE JUST FOR TESTS:
//BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/pgn/twic1467.pgn");
//this->AddPage(bt,bt);
/*BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/pgn/Milov.pgn");
this->AddPage(bt,bt);
bt = new BaseTab((wxFrame *)notebook, "/home/loic/pgn/Milov.pgn");
this->AddPage(bt,bt);*/
}
void MainWindow::AddPage(wxWindow* window, TabInfos* infos){

View file

@ -1,14 +1,38 @@
#include "BaseImportTab.hpp"
#include <algorithm>
#include "gamebase/GameBase.hpp"
BaseImportTab::BaseImportTab(wxFrame *parent, TabInfos *main_tab):
TabBase_TabImport(parent), main_tab(main_tab)
BaseImportTab::BaseImportTab(wxFrame *parent, std::shared_ptr<GameBase> db, TabInfos *main_tab):
TabBase_TabImport(parent), main_tab(main_tab), base(db)
{
glm=new GameListManager(game_list);
glm=std::make_shared<GameListManager>(game_list);
RefreshImportLists();
RefreshPendingImports();
this->Bind(wxEVT_BUTTON, &BaseImportTab::OnLoad, this, ID_LOAD_BUTTON);
this->Bind(wxEVT_BUTTON, &BaseImportTab::OnImportGame, this, ID_IMPORT_GAME_BUTTON);
this->Bind(wxEVT_BUTTON, &BaseImportTab::OnImportSelection, this, ID_IMPORT_SELECTION);
this->Bind(wxEVT_BUTTON, &BaseImportTab::OnImportDatabase, this, ID_IMPORT_DB);
opened_db_list->SetHint("No other database open");
}
void BaseImportTab::OnImportDatabase(wxCommandEvent &event){
if(std::find(databases_to_import.begin(), databases_to_import.end(), selected_base) == databases_to_import.end()){
databases_to_import.push_back(selected_base);
RefreshPendingImports();
}
else SHOW_DIALOG_INFO("Database already prepared for import");
}
void BaseImportTab::RefreshPendingImports(){
int ngames=games_to_import.size();
int ndb=databases_to_import.size();
if(ngames+ndb>0){
pending_imports->SetLabel(" Pending imports: "+std::to_string(ngames)+" games and "+std::to_string(ndb)+" databases");
}else
pending_imports->SetLabel("");
}
void BaseImportTab::RefreshImportLists(){
opened_game_list->Clear();
opened_db_list->Clear();
@ -26,6 +50,48 @@ void BaseImportTab::RefreshImportLists(){
}
}
void BaseImportTab::OnLoad(wxCommandEvent &event){
wxLogDebug("Load!");
void BaseImportTab::OnImportSelection(wxCommandEvent &event){
long selected = -1;
while ((selected = game_list->GetNextItem(selected, wxLIST_NEXT_ALL,
wxLIST_STATE_SELECTED)) !=
wxNOT_FOUND) {
games_to_import.push_back(selected_base->GetGame(glm->GetItemGameId(selected)));
}
RefreshPendingImports();
}
void BaseImportTab::OnImportGame(wxCommandEvent &event){
TabInfos *game_tab=(TabInfos*)opened_game_list->GetClientData(opened_game_list->GetSelection());
std::shared_ptr<Game> g=game_tab->GetGame();
if(std::find(games_to_import.begin(), games_to_import.end(), g) == games_to_import.end()){ wxLogDebug("Import!");
games_to_import.push_back(g);
RefreshPendingImports();
}
else SHOW_DIALOG_INFO("Game already prepared for import");
}
void BaseImportTab::OnLoad(wxCommandEvent &event){
TabInfos *game_tab=(TabInfos*)opened_db_list->GetClientData(opened_db_list->GetSelection());
selected_base.reset();
selected_base=game_tab->GetBase();
glm->Clear();
// Load all games (for now :)
selected_base->Reset();
while (selected_base->NextGame()) {
glm->AddGame(
selected_base->GetTag("White"),
selected_base->GetTag("Black"),
selected_base->GetTag("Event"),
selected_base->GetTag("Round"),
selected_base->GetTag("Result"),
selected_base->GetTag("ECO"));
}
}
void BaseImportTab::Reset(std::shared_ptr<GameBase> base){
this->base=base;
this->games_to_import.clear();
this->databases_to_import.clear();
glm->Clear();
}

View file

@ -1,12 +1,24 @@
#pragma once
#include "ochess.hpp"
#include "GameListManager.hpp"
#include "game_tab/Game.hpp"
class BaseImportTab : public TabBase_TabImport {
TabInfos *main_tab;
GameListManager *glm;
std::shared_ptr<GameListManager> glm;
std::vector<std::shared_ptr<Game>> games_to_import;
std::vector<std::shared_ptr<GameBase>> databases_to_import;
std::shared_ptr<GameBase> base;
std::shared_ptr<GameBase> selected_base;
void RefreshPendingImports();
public:
BaseImportTab(wxFrame *parent, TabInfos *main_tab);
BaseImportTab(wxFrame *parent, std::shared_ptr<GameBase> db, TabInfos *main_tab);
void RefreshImportLists();
void OnLoad(wxCommandEvent &event);
void OnImportGame(wxCommandEvent &event);
void OnImportSelection(wxCommandEvent &event);
void OnImportDatabase(wxCommandEvent &event);
void Reset(std::shared_ptr<GameBase> base);
};

View file

@ -10,9 +10,10 @@ BaseTab::BaseTab(wxFrame *parent, std::string base_file)
// Games tab
games_tab=new BaseGameTab((wxFrame *)notebook,base,this);
glm=games_tab->glm;
notebook->AddPage(games_tab, "Games list",true); // true for selecting the tab
// Import tab
import_tab=new BaseImportTab((wxFrame *)notebook,this);
import_tab=new BaseImportTab((wxFrame *)notebook,base,this);
notebook->AddPage(import_tab, "Import games");
// Manage tab
manage_tab=new BaseManageTab((wxFrame *)notebook, base, games_tab->glm);
@ -67,4 +68,5 @@ void BaseTab::OnSave(wxCommandEvent &event) {
OpenDatabase(base_file);
games_tab->Reset(base);
manage_tab->Reset(base);
import_tab->Reset(base);
}

View file

@ -1,3 +1,4 @@
#pragma once
#include "gamebase/GameBase.hpp"
#include "ochess.hpp"
@ -19,6 +20,7 @@ class BaseTab : public TabBase, public TabInfos {
BaseManageTab *manage_tab;
std::string base_file;
std::shared_ptr<GameListManager> glm;
void OnOpenGame(wxCommandEvent &event);
void OnSave(wxCommandEvent &event);

View file

@ -565,31 +565,38 @@ TabBase_TabImport::TabBase_TabImport( wxWindow* parent, wxWindowID id, const wxP
wxBoxSizer* main_sizer;
main_sizer = new wxBoxSizer( wxVERTICAL );
from_game_label = new wxStaticText( this, wxID_ANY, wxT("From opened games"), wxDefaultPosition, wxDefaultSize, 0 );
from_game_label->Wrap( -1 );
main_sizer->Add( from_game_label, 0, wxALL, 5 );
pending_imports = new wxStaticText( this, wxID_ANY, wxT("No pending imports"), wxDefaultPosition, wxDefaultSize, 0 );
pending_imports->Wrap( -1 );
pending_imports->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
wxBoxSizer* top_sizer;
top_sizer = new wxBoxSizer( wxHORIZONTAL );
main_sizer->Add( pending_imports, 0, wxALL|wxEXPAND, 5 );
m_staticline41 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
main_sizer->Add( m_staticline41, 0, wxEXPAND | wxALL, 5 );
wxBoxSizer* games_sizer;
games_sizer = new wxBoxSizer( wxHORIZONTAL );
from_game_label = new wxStaticText( this, wxID_ANY, wxT("Games:"), wxDefaultPosition, wxDefaultSize, 0 );
from_game_label->Wrap( -1 );
from_game_label->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
games_sizer->Add( from_game_label, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
opened_game_list = new wxComboBox( this, wxID_ANY, wxT("No game opened"), wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY );
top_sizer->Add( opened_game_list, 100, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
games_sizer->Add( opened_game_list, 100, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
import_from_game_button = new wxButton( this, wxID_ANY, wxT("Import Game"), wxDefaultPosition, wxDefaultSize, 0 );
top_sizer->Add( import_from_game_button, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
import_from_game_button = new wxButton( this, ID_IMPORT_GAME_BUTTON, wxT("Import Game"), wxDefaultPosition, wxDefaultSize, 0 );
games_sizer->Add( import_from_game_button, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
main_sizer->Add( top_sizer, 1, wxALIGN_TOP|wxEXPAND, 5 );
main_sizer->Add( games_sizer, 0, wxALIGN_TOP|wxEXPAND, 5 );
m_staticline4 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
main_sizer->Add( m_staticline4, 0, wxEXPAND | wxALL, 5 );
from_db_label = new wxStaticText( this, wxID_ANY, wxT("From opened databases"), wxDefaultPosition, wxDefaultSize, 0 );
from_db_label->Wrap( -1 );
main_sizer->Add( from_db_label, 0, wxALL, 5 );
wxBoxSizer* bottom_sizer;
bottom_sizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* databases_sizer;
databases_sizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizer33;
bSizer33 = new wxBoxSizer( wxHORIZONTAL );
@ -605,18 +612,21 @@ TabBase_TabImport::TabBase_TabImport( wxWindow* parent, wxWindowID id, const wxP
bSizer33->Add( load_button, 0, wxALL, 5 );
bottom_sizer->Add( bSizer33, 1, wxEXPAND, 5 );
databases_sizer->Add( bSizer33, 0, wxEXPAND, 5 );
game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ICON|wxLC_REPORT );
game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT );
game_list->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_INACTIVECAPTIONTEXT ) );
bottom_sizer->Add( game_list, 20, wxALL|wxEXPAND, 5 );
databases_sizer->Add( game_list, 100, wxALL|wxEXPAND, 5 );
import_from_db_button = new wxButton( this, wxID_ANY, wxT("Import Selection"), wxDefaultPosition, wxDefaultSize, 0 );
bottom_sizer->Add( import_from_db_button, 0, wxALL|wxEXPAND, 5 );
import_from_db_button = new wxButton( this, ID_IMPORT_SELECTION, wxT("Import Selection"), wxDefaultPosition, wxDefaultSize, 0 );
databases_sizer->Add( import_from_db_button, 0, wxALL|wxEXPAND, 5 );
m_button16 = new wxButton( this, ID_IMPORT_DB, wxT("Import all games"), wxDefaultPosition, wxDefaultSize, 0 );
databases_sizer->Add( m_button16, 0, wxALL|wxEXPAND, 5 );
main_sizer->Add( bottom_sizer, 100, wxEXPAND, 5 );
main_sizer->Add( databases_sizer, 80, wxEXPAND, 5 );
this->SetSizer( main_sizer );

View file

@ -58,8 +58,11 @@
#define ID_SEARCH_TERMS 1013
#define ID_APPLY_FILTER_BUTTON 1014
#define ID_DELETE_BUTTON 1015
#define ID_LOAD_BUTTON 1016
#define ID_SAVE_BUTTON 1017
#define ID_IMPORT_GAME_BUTTON 1016
#define ID_LOAD_BUTTON 1017
#define ID_IMPORT_SELECTION 1018
#define ID_IMPORT_DB 1019
#define ID_SAVE_BUTTON 1020
///////////////////////////////////////////////////////////////////////////////
/// Class MainFrame
@ -331,20 +334,22 @@ class TabBase_TabImport : public wxPanel
private:
protected:
wxStaticText* pending_imports;
wxStaticLine* m_staticline41;
wxStaticText* from_game_label;
wxComboBox* opened_game_list;
wxButton* import_from_game_button;
wxStaticLine* m_staticline4;
wxStaticText* from_db_label;
wxStaticText* m_staticText29;
wxComboBox* opened_db_list;
wxButton* load_button;
wxListCtrl* game_list;
wxButton* import_from_db_button;
wxButton* m_button16;
public:
TabBase_TabImport( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,200 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
TabBase_TabImport( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,661 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~TabBase_TabImport();

View file

@ -1,5 +1,6 @@
#include "ochess.hpp"
#include "MainWindow.hpp"
#include "base_tab/BaseTab.hpp"
bool MyApp::OnInit() {
wxImage::AddHandler(new wxPNGHandler);
@ -18,6 +19,7 @@ std::vector<TabInfos *> MyApp::ListTabInfos() {
return (tinfos);
}
wxIMPLEMENT_APP(MyApp);
void Abort(std::string msg) {

View file

@ -21,7 +21,7 @@
NULL, wxT(message), wxT("Error"), wxOK | wxICON_ERROR); \
dial->ShowModal(); \
}
#define SHOW_DIALOG_INFO(message) {wxMessageBox( wxT(message) );}
#define REQUIRE_FILE(file) \
{ \
if (!wxFileExists(file)) { \

View file

@ -5135,7 +5135,7 @@
</object>
</object>
</object>
<object class="Panel" expanded="0">
<object class="Panel" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
@ -5158,7 +5158,7 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<object class="wxBoxSizer" expanded="0">
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">main_sizer</property>
<property name="orient">wxVERTICAL</property>
@ -5520,7 +5520,7 @@
</object>
</object>
</object>
<object class="Panel" expanded="0">
<object class="Panel" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
@ -5536,23 +5536,84 @@
<property name="minimum_size"></property>
<property name="name">TabBase_TabImport</property>
<property name="pos"></property>
<property name="size">500,200</property>
<property name="size">500,661</property>
<property name="subclass">; ; forward_declare</property>
<property name="tooltip"></property>
<property name="two_step_creation">0</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<object class="wxBoxSizer" expanded="0">
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">main_sizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg">wxSYS_COLOUR_WINDOW</property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">No pending imports</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">pending_imports</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticLine" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -5580,8 +5641,6 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">From opened games</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -5589,7 +5648,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">from_game_label</property>
<property name="name">m_staticline41</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -5599,25 +5658,85 @@
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="style">wxLI_HORIZONTAL</property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_TOP|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="0">
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">top_sizer</property>
<property name="name">games_sizer</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg">wxSYS_COLOUR_WINDOW</property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Games:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">from_game_label</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
@ -5720,7 +5839,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="id">ID_IMPORT_GAME_BUTTON</property>
<property name="label">Import Game</property>
<property name="margins"></property>
<property name="markup">0</property>
@ -5816,80 +5935,19 @@
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">From opened databases</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">from_db_label</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">100</property>
<object class="wxBoxSizer" expanded="0">
<property name="proportion">80</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bottom_sizer</property>
<property name="name">databases_sizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer33</property>
@ -6099,7 +6157,7 @@
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">20</property>
<property name="proportion">100</property>
<object class="wxListCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
@ -6145,7 +6203,7 @@
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxLC_ICON|wxLC_REPORT</property>
<property name="style">wxLC_REPORT</property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
@ -6195,7 +6253,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="id">ID_IMPORT_SELECTION</property>
<property name="label">Import Selection</property>
<property name="margins"></property>
<property name="markup">0</property>
@ -6231,6 +6289,79 @@
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="auth_needed">0</property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmap"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="current"></property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="disabled"></property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="focus"></property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">ID_IMPORT_DB</property>
<property name="label">Import all games</property>
<property name="margins"></property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_button16</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="pressed"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
</object>
</object>
</object>