Debug database tab

This commit is contained in:
Loic Guegan 2022-12-26 12:51:48 +01:00
parent 2bd85f53bc
commit 1d78e106ad
15 changed files with 315 additions and 528 deletions

View file

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

View file

@ -5,23 +5,19 @@
wxDEFINE_EVENT(OPEN_GAME_EVENT, wxCommandEvent); wxDEFINE_EVENT(OPEN_GAME_EVENT, wxCommandEvent);
BaseGameTab::BaseGameTab(wxFrame *parent, std::string base_file, TabInfos *main_tab) BaseGameTab::BaseGameTab(wxFrame *parent, std::shared_ptr<GameBase> base, TabInfos *main_tab)
: TabBase_TabGames(parent), base_file(base_file), : TabBase_TabGames(parent), main_tab(main_tab),base(base) {
base(NULL),main_tab(main_tab) {
glm=std::make_shared<GameListManager>(game_list);
Reset(base);
glm=new GameListManager(game_list);
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnDelete, this, ID_DELETE_BUTTON); this->Bind(wxEVT_BUTTON, &BaseGameTab::OnDelete, this, ID_DELETE_BUTTON);
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnSave, this, ID_SAVE_BUTTON);
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnExport, this, ID_EXPORT_BUTTON);
this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseGameTab::OnOpenGame, this, wxID_ANY); this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseGameTab::OnOpenGame, this, wxID_ANY);
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnImport, this, ID_IMPORT_BUTTON);
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnApplyFilter, this, ID_APPLY_FILTER_BUTTON); this->Bind(wxEVT_BUTTON, &BaseGameTab::OnApplyFilter, this, ID_APPLY_FILTER_BUTTON);
this->Bind(wxEVT_TEXT_ENTER, &BaseGameTab::OnApplyFilter, this, ID_SEARCH_TERMS); this->Bind(wxEVT_TEXT_ENTER, &BaseGameTab::OnApplyFilter, this, ID_SEARCH_TERMS);
current_base->SetLabel(base_file);
search_terms->SetHint("e.g: Paul Morphy"); search_terms->SetHint("e.g: Paul Morphy");
LoadFile();
} }
void BaseGameTab::OnApplyFilter(wxCommandEvent &event){ void BaseGameTab::OnApplyFilter(wxCommandEvent &event){
@ -34,12 +30,12 @@ void BaseGameTab::OnApplyFilter(wxCommandEvent &event){
} }
void BaseGameTab::OnImport(wxCommandEvent &event) { void BaseGameTab::OnImport(wxCommandEvent &event) {
AppendGameDialog *dia = new AppendGameDialog(this, base); // AppendGameDialog *dia = new AppendGameDialog(this, base);
dia->ShowModal(); // dia->ShowModal();
glm->Clear(); // glm->Clear();
deleted.clear(); // deleted.clear();
edited.clear(); // edited.clear();
LoadFile(); // LoadFile();
} }
void BaseGameTab::OnDelete(wxCommandEvent &event) { void BaseGameTab::OnDelete(wxCommandEvent &event) {
@ -50,35 +46,37 @@ void BaseGameTab::OnDelete(wxCommandEvent &event) {
} }
void BaseGameTab::OnSave(wxCommandEvent &event) { void BaseGameTab::OnSave(wxCommandEvent &event) {
std::vector<std::shared_ptr<GameBase>> new_games_bases; // std::vector<std::shared_ptr<GameBase>> new_games_bases;
// Build edited games vector // // Build edited games vector
std::vector<std::shared_ptr<Game>> edited_games; // std::vector<std::shared_ptr<Game>> edited_games;
for (auto itr = edited.begin(); itr != edited.end(); itr++) { // for (auto itr = edited.begin(); itr != edited.end(); itr++) {
edited_games.push_back(itr->second); // edited_games.push_back(itr->second);
} // }
// Combine new_games and edited games // // Combine new_games and edited games
std::vector<std::shared_ptr<Game>> new_games; // std::vector<std::shared_ptr<Game>> new_games;
new_games.insert( // new_games.insert(
new_games.end(), edited_games.begin(), // new_games.end(), edited_games.begin(),
edited_games.end()); // Add edited game (since they are also deleted) // edited_games.end()); // Add edited game (since they are also deleted)
base->Save(deleted, new_games_bases, new_games); // base->Save(deleted, new_games_bases, new_games);
// Close all opened games in this database // // Close all opened games in this database
wxCommandEvent closeLinkedTabEvent(CLOSE_LINKED_TAB, GetId()); // wxCommandEvent closeLinkedTabEvent(CLOSE_LINKED_TAB, GetId());
closeLinkedTabEvent.SetClientData(main_tab); // closeLinkedTabEvent.SetClientData(main_tab);
ProcessEvent(closeLinkedTabEvent); // ProcessEvent(closeLinkedTabEvent);
glm->Clear(); // glm->Clear();
edited.clear(); // edited.clear();
deleted.clear(); // deleted.clear();
LoadFile(); // LoadFile();
} }
void BaseGameTab::OnOpenGame(wxListEvent &event) { void BaseGameTab::OnOpenGame(wxListEvent &event) {
long id = std::stoi(event.GetItem().GetText().ToStdString()); long id = std::stoi(event.GetItem().GetText().ToStdString());
std::shared_ptr<Game> *g = new std::shared_ptr<Game>(base->GetGame(id)); std::shared_ptr<Game> *g = new std::shared_ptr<Game>(base->GetGame(id));
wxLogDebug("kjkj");
if (g != NULL) { if (g != NULL) {
if(edited.find(id) != edited.end()){ if(edited.find(id) != edited.end()){
// TODO: Focus on the game tab and if close reopen it // TODO: Focus on the game tab and if close reopen it
@ -97,33 +95,21 @@ void BaseGameTab::OnOpenGame(wxListEvent &event) {
} }
} }
void BaseGameTab::ApplyPreferences() {} std::vector<std::shared_ptr<Game>> BaseGameTab::GetEditedGames(){
std::vector<std::shared_ptr<Game>> games;
void BaseGameTab::OnExport(wxCommandEvent &event) { for(auto it = edited.begin(); it != edited.end(); it++){
wxFileDialog openFileDialog(this, _("Export database"), "", "", games.push_back(it->second);
"Database files (*.pgn)|*.pgn",
wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
if (openFileDialog.ShowModal() != wxID_CANCEL) {
std::string path = openFileDialog.GetPath().ToStdString();
wxFileName file(base_file);
wxString ext = file.GetExt().Lower();
GameBase *base;
if (ext == "pgn") {
base = new PGNGameBase(path);
base->Export(this->base);
delete base;
}
} }
return(games);
} }
void BaseGameTab::LoadFile() { void BaseGameTab::Reset(std::shared_ptr<GameBase> base){
wxFileName file(base_file); glm->Clear();
wxString ext = file.GetExt().Lower(); edited.clear();
if (ext == "pgn") { deleted.clear();
base = std::shared_ptr<GameBase>(new PGNGameBase(base_file));
SetLabel(file.GetName() + "(PGN)");
}
// Load all games (for now :)
this->base=base;
if (base != NULL) { if (base != NULL) {
while (base->NextGame()) { while (base->NextGame()) {
glm->AddGame( glm->AddGame(
@ -135,8 +121,23 @@ void BaseGameTab::LoadFile() {
base->GetTag("ECO")); base->GetTag("ECO"));
} }
} }
wxCommandEvent event(REFRESH_TAB_TITLE, GetId());
event.SetEventObject(this);
ProcessEvent(event);
} }
void BaseGameTab::OnExport(wxCommandEvent &event) {
// wxFileDialog openFileDialog(this, _("Export database"), "", "",
// "Database files (*.pgn)|*.pgn",
// wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
// if (openFileDialog.ShowModal() != wxID_CANCEL) {
// std::string path = openFileDialog.GetPath().ToStdString();
// wxFileName file(base_file);
// wxString ext = file.GetExt().Lower();
// GameBase *base;
// if (ext == "pgn") {
// base = new PGNGameBase(path);
// base->Export(this->base);
// delete base;
// }
// }
}

View file

@ -5,29 +5,28 @@
// Foreign events // Foreign events
wxDECLARE_EVENT(OPEN_GAME_EVENT, wxCommandEvent); wxDECLARE_EVENT(OPEN_GAME_EVENT, wxCommandEvent);
wxDECLARE_EVENT(REFRESH_TAB_TITLE, wxCommandEvent);
wxDECLARE_EVENT(CLOSE_LINKED_TAB, wxCommandEvent); wxDECLARE_EVENT(CLOSE_LINKED_TAB, wxCommandEvent);
class BaseGameTab : public TabBase_TabGames { class BaseGameTab : public TabBase_TabGames {
std::shared_ptr<GameBase> base; std::shared_ptr<GameBase> base;
std::vector<std::uint32_t> deleted; std::vector<std::uint32_t> deleted;
std::unordered_map<long, std::shared_ptr<Game>> edited; std::unordered_map<long, std::shared_ptr<Game>> edited;
std::string base_file;
TabInfos *main_tab; TabInfos *main_tab;
GameListManager *glm;
public: public:
BaseGameTab(wxFrame *parent, std::string base_file, TabInfos *main_tab); std::shared_ptr<GameListManager> glm;
~BaseGameTab() {delete(glm);};
void ApplyPreferences(); BaseGameTab(wxFrame *parent, std::shared_ptr<GameBase> base, TabInfos *main_tab);
void LoadFile();
void Reset(std::shared_ptr<GameBase> base);
void OnDelete(wxCommandEvent &event); void OnDelete(wxCommandEvent &event);
void OnSave(wxCommandEvent &event); void OnSave(wxCommandEvent &event);
void OnExport(wxCommandEvent &event); void OnExport(wxCommandEvent &event);
void OnOpenGame(wxListEvent &event); void OnOpenGame(wxListEvent &event);
void OnImport(wxCommandEvent &event); void OnImport(wxCommandEvent &event);
void OnApplyFilter(wxCommandEvent &event); void OnApplyFilter(wxCommandEvent &event);
std::vector<std::shared_ptr<Game>> GetEditedGames();
std::vector<std::uint32_t> GetDeletedGameIds() {return(deleted);};
std::shared_ptr<Game> GetGame() { return (std::shared_ptr<Game>(NULL)); } std::shared_ptr<Game> GetGame() { return (std::shared_ptr<Game>(NULL)); }
std::shared_ptr<GameBase> GetBase() { return (std::shared_ptr<GameBase>(base)); }; std::shared_ptr<GameBase> GetBase() { return (std::shared_ptr<GameBase>(base)); };
}; };

View file

@ -1,9 +1,25 @@
#include "BaseManageTab.hpp" #include "BaseManageTab.hpp"
#define ADD_INFO(text) {informations->WriteText(text);informations->WriteText("\n");}
BaseManageTab::BaseManageTab(wxFrame *parent):
TabBase_TabManage(parent) BaseManageTab::BaseManageTab(wxFrame *parent, std::shared_ptr<GameBase> db, std::shared_ptr<GameListManager> glm):
TabBase_TabManage(parent), glm(glm), base(db)
{ {
RefreshInformations();
} }
void BaseManageTab::RefreshInformations(){
informations->Clear();
wxFileName base_path(base->GetFilePath());
ADD_INFO("Database Path: "+base_path.GetFullPath());
ADD_INFO("File Size: "+base_path.GetHumanReadableSize());
ADD_INFO("Last Modified: "+base_path.GetModificationTime().Format());
ADD_INFO("Database Format: "+base->GetFormat());
ADD_INFO("Total Number of Games: "+std::to_string(glm->rows.size()));
}
void BaseManageTab::Reset(std::shared_ptr<GameBase> db) {
this->base=db;
RefreshInformations();
}

View file

@ -1,10 +1,15 @@
#include "ochess.hpp" #include "ochess.hpp"
#include "GameListManager.hpp"
#include "gamebase/GameBase.hpp"
class BaseManageTab : public TabBase_TabManage { class BaseManageTab : public TabBase_TabManage {
/// @brief Never free the following pointer in that class
std::shared_ptr<GameListManager> glm;
std::shared_ptr<GameBase> base;
public: public:
BaseManageTab(wxFrame *parent); BaseManageTab(wxFrame *parent, std::shared_ptr<GameBase> db, std::shared_ptr<GameListManager> glm);
void RefreshInformations();
void Reset(std::shared_ptr<GameBase> db);
}; };

View file

@ -3,34 +3,68 @@
#include <wx/filename.h> #include <wx/filename.h>
BaseTab::BaseTab(wxFrame *parent, std::string base_file) BaseTab::BaseTab(wxFrame *parent, std::string base_file)
: TabBase(parent), TabInfos(TabInfos::BASE){ : TabBase(parent), TabInfos(TabInfos::BASE), base_file(base_file){
// First open the database
OpenDatabase(base_file);
// Games tab // Games tab
games_tab=new BaseGameTab((wxFrame *)notebook,base_file,this); games_tab=new BaseGameTab((wxFrame *)notebook,base,this);
notebook->AddPage(games_tab, "Games list",true); // true for selecting the tab notebook->AddPage(games_tab, "Games list",true); // true for selecting the tab
// Import tab // Import tab
import_tab=new BaseImportTab((wxFrame *)notebook,this); import_tab=new BaseImportTab((wxFrame *)notebook,this);
notebook->AddPage(import_tab, "Import games"); notebook->AddPage(import_tab, "Import games");
// Manage tab // Manage tab
manage_tab=new BaseManageTab((wxFrame *)notebook); manage_tab=new BaseManageTab((wxFrame *)notebook, base, games_tab->glm);
notebook->AddPage(manage_tab, "Manage database"); notebook->AddPage(manage_tab, "Manage database");
RefreshLabel(); // Refresh dynamic elements of the database (tab title, available db for import etc.)
this->Bind(OPEN_GAME_EVENT, &BaseTab::OnNewGame, this, wxID_ANY); Refresh();
// Bindings
this->Bind(OPEN_GAME_EVENT, &BaseTab::OnOpenGame, this, wxID_ANY);
this->Bind(wxEVT_BUTTON, &BaseTab::OnSave, this, ID_SAVE_BUTTON);
} }
void BaseTab::OnNewGame(wxCommandEvent &event){ void BaseTab::OnOpenGame(wxCommandEvent &event){
std::shared_ptr<Game> *g = (std::shared_ptr<Game>*)event.GetClientData(); std::shared_ptr<Game> *g = (std::shared_ptr<Game>*)event.GetClientData();
this->game=*g; this->game=*g;
// Ask MainFrame to open a new game
// TODO: Simplify that is, use wxWidget main app to do it
wxCommandEvent newGameEvent(NEW_GAME_EVENT, GetId()); wxCommandEvent newGameEvent(NEW_GAME_EVENT, GetId());
newGameEvent.SetEventObject(this); newGameEvent.SetEventObject(this);
newGameEvent.SetClientData((TabInfos*)this); newGameEvent.SetClientData((TabInfos*)this);
ProcessEvent(newGameEvent); ProcessEvent(newGameEvent);
} }
void BaseTab::ApplyPreferences() {} void BaseTab::Refresh(){
import_tab->RefreshImportLists();
SetLabel(wxFileName(base->GetFilePath()).GetName()+" [DB]"); // Propagated to MainWindow tab title automatically by wxWidget
}
void BaseTab::RefreshLabel(){ void BaseTab::OpenDatabase(std::string dbpath) {
SetLabel("Database XX"); wxFileName file(dbpath);
wxString ext = file.GetExt().Lower();
if (ext == "pgn") {
base.reset();
base = std::shared_ptr<GameBase>(new PGNGameBase(dbpath));
}
}
void BaseTab::OnSave(wxCommandEvent &event) {
std::vector<std::shared_ptr<GameBase>> dummy_empty_base;
base->Save(games_tab->GetDeletedGameIds(), dummy_empty_base, games_tab->GetEditedGames());
// Close all opened games in this database
wxCommandEvent closeLinkedTabEvent(CLOSE_LINKED_TAB, GetId());
closeLinkedTabEvent.SetClientData((TabInfos*)this);
ProcessEvent(closeLinkedTabEvent);
// Reopen the saved database
OpenDatabase(base_file);
games_tab->Reset(base);
manage_tab->Reset(base);
} }

View file

@ -7,21 +7,27 @@
wxDECLARE_EVENT(NEW_GAME_EVENT, wxCommandEvent); wxDECLARE_EVENT(NEW_GAME_EVENT, wxCommandEvent);
class BaseTab : public TabBase, public TabInfos { class BaseTab : public TabBase, public TabInfos {
/// @brief The opened database
std::shared_ptr<GameBase> base; std::shared_ptr<GameBase> base;
/// @brief The last opened game
std::shared_ptr<Game> game; std::shared_ptr<Game> game;
/// All sub tabs
BaseGameTab *games_tab; BaseGameTab *games_tab;
BaseImportTab *import_tab; BaseImportTab *import_tab;
BaseManageTab *manage_tab; BaseManageTab *manage_tab;
void OnNewGame(wxCommandEvent &event); std::string base_file;
void OnOpenGame(wxCommandEvent &event);
void OnSave(wxCommandEvent &event);
void OpenDatabase(std::string dbpath);
public: public:
BaseTab(wxFrame *parent, std::string base_file); BaseTab(wxFrame *parent, std::string base_file);
void ApplyPreferences(); void Refresh();
void RefreshLabel();
std::shared_ptr<Game> GetGame() { return (std::shared_ptr<Game>(game)); } std::shared_ptr<Game> GetGame() { return (std::shared_ptr<Game>(game)); }
std::shared_ptr<GameBase> GetBase() { return (std::shared_ptr<GameBase>(base)); }; std::shared_ptr<GameBase> GetBase() { return (std::shared_ptr<GameBase>(base)); };
void Refresh() {import_tab->RefreshImportLists();};
}; };

View file

@ -41,6 +41,7 @@ void GameListManager::Clear(){
deleted_games.clear(); deleted_games.clear();
opened_games.clear(); opened_games.clear();
rows.clear(); rows.clear();
game_counter=0;
} }
void GameListManager::ClearDisplayedRow(){ void GameListManager::ClearDisplayedRow(){

View file

@ -22,14 +22,15 @@ typedef struct Item {
} RType; } RType;
class GameListManager { class GameListManager {
wxListCtrl *game_list;
long game_counter; long game_counter;
std::vector<RType> rows; wxListCtrl *game_list;
std::vector<long> deleted_games, opened_games; std::vector<long> deleted_games, opened_games;
void DisplayRow(long id); void DisplayRow(long id);
void ClearDisplayedRow(); void ClearDisplayedRow();
public: public:
std::vector<RType> rows;
GameListManager(wxListCtrl *game_list); GameListManager(wxListCtrl *game_list);
void AddGame(CType White,CType Black,CType Event,CType Round, CType Result, CType Eco); void AddGame(CType White,CType Black,CType Event,CType Round, CType Result, CType Eco);
void Clear(); void Clear();

View file

@ -14,6 +14,8 @@ public:
virtual bool NextGame() = 0; virtual bool NextGame() = 0;
virtual std::string GetTag(std::string tag) = 0; virtual std::string GetTag(std::string tag) = 0;
virtual void Reset() = 0; virtual void Reset() = 0;
virtual std::string GetFormat() = 0;
virtual std::string GetFilePath() = 0;
/** /**
* @brief Save the given base into current base format (export) * @brief Save the given base into current base format (export)
* *

View file

@ -18,6 +18,8 @@ public:
std::vector<std::shared_ptr<Game>> new_games); std::vector<std::shared_ptr<Game>> new_games);
void Reset(); void Reset();
void Export(std::shared_ptr<GameBase> base); void Export(std::shared_ptr<GameBase> base);
std::string GetFormat() {return("PGN");};
std::string GetFilePath() {return(file);};
static std::string GetMovesPGN(HalfMove *m, bool needDots); static std::string GetMovesPGN(HalfMove *m, bool needDots);
static std::string GetPGN(std::shared_ptr<Game> g); static std::string GetPGN(std::shared_ptr<Game> g);
}; };

View file

@ -526,47 +526,25 @@ TabBase_TabGames::TabBase_TabGames( wxWindow* parent, wxWindowID id, const wxPoi
wxBoxSizer* top_sizer; wxBoxSizer* top_sizer;
top_sizer = new wxBoxSizer( wxHORIZONTAL ); top_sizer = new wxBoxSizer( wxHORIZONTAL );
current_base = new wxStaticText( this, wxID_ANY, wxT("unknown"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText28 = new wxStaticText( this, wxID_ANY, wxT("Filter:"), wxDefaultPosition, wxDefaultSize, 0 );
current_base->Wrap( -1 ); m_staticText28->Wrap( -1 );
top_sizer->Add( current_base, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); top_sizer->Add( m_staticText28, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
save_button = new wxButton( this, ID_SAVE_BUTTON, wxT("Save"), wxDefaultPosition, wxDefaultSize, 0 ); search_terms = new wxTextCtrl( this, ID_SEARCH_TERMS, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
top_sizer->Add( save_button, 0, wxALL, 5 ); top_sizer->Add( search_terms, 1, wxALL|wxEXPAND, 5 );
export_button = new wxButton( this, ID_EXPORT_BUTTON, wxT("Export"), wxDefaultPosition, wxDefaultSize, 0 ); apply_filter_button = new wxButton( this, ID_APPLY_FILTER_BUTTON, wxT("Apply"), wxDefaultPosition, wxDefaultSize, 0 );
top_sizer->Add( export_button, 0, wxALL, 5 ); top_sizer->Add( apply_filter_button, 0, wxALL, 5 );
main_sizer->Add( top_sizer, 0, wxEXPAND, 5 ); main_sizer->Add( top_sizer, 0, wxEXPAND, 5 );
separator_1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
main_sizer->Add( separator_1, 0, wxEXPAND | wxALL, 5 );
wxBoxSizer* bSizer34;
bSizer34 = new wxBoxSizer( wxHORIZONTAL );
m_staticText28 = new wxStaticText( this, wxID_ANY, wxT("Filter:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText28->Wrap( -1 );
bSizer34->Add( m_staticText28, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
search_terms = new wxTextCtrl( this, ID_SEARCH_TERMS, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
bSizer34->Add( search_terms, 1, wxALL|wxEXPAND, 5 );
apply_filter_button = new wxButton( this, ID_APPLY_FILTER_BUTTON, wxT("Apply"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer34->Add( apply_filter_button, 0, wxALL, 5 );
main_sizer->Add( bSizer34, 0, wxEXPAND, 5 );
game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxLC_REPORT ); game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxLC_REPORT );
main_sizer->Add( game_list, 1, wxALL|wxEXPAND, 5 ); main_sizer->Add( game_list, 1, wxALL|wxEXPAND, 5 );
wxBoxSizer* bottom_sizer; wxBoxSizer* bottom_sizer;
bottom_sizer = new wxBoxSizer( wxHORIZONTAL ); bottom_sizer = new wxBoxSizer( wxHORIZONTAL );
import_button = new wxButton( this, ID_IMPORT_BUTTON, wxT("Import games"), wxDefaultPosition, wxDefaultSize, 0 );
bottom_sizer->Add( import_button, 1, wxALL|wxEXPAND, 5 );
delete_button = new wxButton( this, ID_DELETE_BUTTON, wxT("Mark as deleted"), wxDefaultPosition, wxDefaultSize, 0 ); delete_button = new wxButton( this, ID_DELETE_BUTTON, wxT("Mark as deleted"), wxDefaultPosition, wxDefaultSize, 0 );
bottom_sizer->Add( delete_button, 1, wxALL|wxEXPAND, 5 ); bottom_sizer->Add( delete_button, 1, wxALL|wxEXPAND, 5 );
@ -654,9 +632,19 @@ TabBase_TabManage::TabBase_TabManage( wxWindow* parent, wxWindowID id, const wxP
wxBoxSizer* main_sizer; wxBoxSizer* main_sizer;
main_sizer = new wxBoxSizer( wxVERTICAL ); main_sizer = new wxBoxSizer( wxVERTICAL );
m_staticText27 = new wxStaticText( this, wxID_ANY, wxT("TODO"), wxDefaultPosition, wxDefaultSize, 0 ); informations = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
m_staticText27->Wrap( -1 ); informations->SetBackgroundColour( wxColour( 235, 235, 235 ) );
main_sizer->Add( m_staticText27, 0, wxALL, 5 );
main_sizer->Add( informations, 100, wxALL|wxEXPAND, 5 );
wxBoxSizer* bottom_sizer;
bottom_sizer = new wxBoxSizer( wxVERTICAL );
save_button = new wxButton( this, ID_SAVE_BUTTON, wxT("Save All Changes"), wxDefaultPosition, wxDefaultSize, 0 );
bottom_sizer->Add( save_button, 0, wxALL|wxEXPAND, 5 );
main_sizer->Add( bottom_sizer, 1, wxEXPAND, 5 );
this->SetSizer( main_sizer ); this->SetSizer( main_sizer );

View file

@ -55,13 +55,11 @@
#define UPDATE_BTN 1010 #define UPDATE_BTN 1010
#define DELETE_BTN 1011 #define DELETE_BTN 1011
#define LIVE_ANALYSIS_GAME_BUTTON 1012 #define LIVE_ANALYSIS_GAME_BUTTON 1012
#define ID_SAVE_BUTTON 1013 #define ID_SEARCH_TERMS 1013
#define ID_EXPORT_BUTTON 1014 #define ID_APPLY_FILTER_BUTTON 1014
#define ID_SEARCH_TERMS 1015 #define ID_DELETE_BUTTON 1015
#define ID_APPLY_FILTER_BUTTON 1016 #define ID_LOAD_BUTTON 1016
#define ID_IMPORT_BUTTON 1017 #define ID_SAVE_BUTTON 1017
#define ID_DELETE_BUTTON 1018
#define ID_LOAD_BUTTON 1019
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/// Class MainFrame /// Class MainFrame
@ -311,20 +309,15 @@ class TabBase_TabGames : public wxPanel
private: private:
protected: protected:
wxStaticText* current_base;
wxButton* save_button;
wxButton* export_button;
wxStaticLine* separator_1;
wxStaticText* m_staticText28; wxStaticText* m_staticText28;
wxTextCtrl* search_terms; wxTextCtrl* search_terms;
wxButton* apply_filter_button; wxButton* apply_filter_button;
wxListCtrl* game_list; wxListCtrl* game_list;
wxButton* import_button;
wxButton* delete_button; wxButton* delete_button;
public: public:
TabBase_TabGames( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString ); TabBase_TabGames( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 559,522 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~TabBase_TabGames(); ~TabBase_TabGames();
@ -365,7 +358,8 @@ class TabBase_TabManage : public wxPanel
private: private:
protected: protected:
wxStaticText* m_staticText27; wxTextCtrl* informations;
wxButton* save_button;
public: public:

View file

@ -53,7 +53,7 @@ public:
TabInfos(Type type_) : type(type_), id(tab_count), is_linked(false) { tab_count++; wxLogDebug("Tabid=%d",(int)id); } TabInfos(Type type_) : type(type_), id(tab_count), is_linked(false) { tab_count++; wxLogDebug("Tabid=%d",(int)id); }
void Link(TabInfos *tab); void Link(TabInfos *tab);
virtual void Refresh(){}; virtual void Refresh(){};
virtual void ApplyPreferences() = 0; virtual void ApplyPreferences() {};
virtual std::shared_ptr<Game> GetGame() = 0; virtual std::shared_ptr<Game> GetGame() = 0;
virtual std::shared_ptr<GameBase> GetBase() = 0; virtual std::shared_ptr<GameBase> GetBase() = 0;
}; };

View file

@ -3622,7 +3622,7 @@
</object> </object>
</object> </object>
</object> </object>
<object class="Panel" expanded="1"> <object class="Panel" expanded="0">
<property name="aui_managed">0</property> <property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property> <property name="bg"></property>
@ -3645,16 +3645,16 @@
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property> <property name="window_style">wxTAB_TRAVERSAL</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">main_sizer</property> <property name="name">main_sizer</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property> <property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxNotebook" expanded="1"> <object class="wxNotebook" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -5135,7 +5135,7 @@
</object> </object>
</object> </object>
</object> </object>
<object class="Panel" expanded="1"> <object class="Panel" expanded="0">
<property name="aui_managed">0</property> <property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property> <property name="bg"></property>
@ -5151,14 +5151,14 @@
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">TabBase_TabGames</property> <property name="name">TabBase_TabGames</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size">500,300</property> <property name="size">559,522</property>
<property name="subclass">; ; forward_declare</property> <property name="subclass">; ; forward_declare</property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="two_step_creation">0</property> <property name="two_step_creation">0</property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property> <property name="window_style">wxTAB_TRAVERSAL</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">main_sizer</property> <property name="name">main_sizer</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
@ -5175,284 +5175,8 @@
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property> <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">1</property> <property name="proportion">0</property>
<object class="wxStaticText" expanded="0"> <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">unknown</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">current_base</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">wxALL</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_SAVE_BUTTON</property>
<property name="label">Save</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">save_button</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 class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</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_EXPORT_BUTTON</property>
<property name="label">Export</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">export_button</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 class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticLine" 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="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">separator_1</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">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>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer34</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -5509,11 +5233,11 @@
<property name="wrap">-1</property> <property name="wrap">-1</property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -5573,11 +5297,11 @@
<property name="window_style"></property> <property name="window_style"></property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL</property> <property name="flag">wxALL</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -5710,88 +5434,15 @@
<property name="window_style"></property> <property name="window_style"></property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bottom_sizer</property> <property name="name">bottom_sizer</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</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_BUTTON</property>
<property name="label">Import 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">import_button</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 class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>
@ -5869,7 +5520,7 @@
</object> </object>
</object> </object>
</object> </object>
<object class="Panel" expanded="1"> <object class="Panel" expanded="0">
<property name="aui_managed">0</property> <property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property> <property name="bg"></property>
@ -5892,7 +5543,7 @@
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property> <property name="window_style">wxTAB_TRAVERSAL</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">main_sizer</property> <property name="name">main_sizer</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
@ -5958,11 +5609,11 @@
<property name="wrap">-1</property> <property name="wrap">-1</property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALIGN_TOP|wxEXPAND</property> <property name="flag">wxALIGN_TOP|wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">top_sizer</property> <property name="name">top_sizer</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
@ -6226,29 +5877,29 @@
<property name="wrap">-1</property> <property name="wrap">-1</property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">100</property> <property name="proportion">100</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bottom_sizer</property> <property name="name">bottom_sizer</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bSizer33</property> <property name="name">bSizer33</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property> <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -6305,11 +5956,11 @@
<property name="wrap">-1</property> <property name="wrap">-1</property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">100</property> <property name="proportion">100</property>
<object class="wxComboBox" expanded="1"> <object class="wxComboBox" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -6370,11 +6021,11 @@
<property name="window_style"></property> <property name="window_style"></property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL</property> <property name="flag">wxALL</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -6507,11 +6158,11 @@
<property name="window_style"></property> <property name="window_style"></property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -6614,9 +6265,9 @@
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">100</property>
<object class="wxStaticText" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -6626,7 +6277,7 @@
<property name="aui_position"></property> <property name="aui_position"></property>
<property name="aui_row"></property> <property name="aui_row"></property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg">235,235,235</property>
<property name="caption"></property> <property name="caption"></property>
<property name="caption_visible">1</property> <property name="caption_visible">1</property>
<property name="center_pane">0</property> <property name="center_pane">0</property>
@ -6644,16 +6295,15 @@
<property name="gripper">0</property> <property name="gripper">0</property>
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">TODO</property>
<property name="markup">0</property>
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property> <property name="min_size"></property>
<property name="minimize_button">0</property> <property name="minimize_button">0</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="moveable">1</property> <property name="moveable">1</property>
<property name="name">m_staticText27</property> <property name="name">informations</property>
<property name="pane_border">1</property> <property name="pane_border">1</property>
<property name="pane_position"></property> <property name="pane_position"></property>
<property name="pane_size"></property> <property name="pane_size"></property>
@ -6663,14 +6313,102 @@
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style"></property> <property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
<property name="subclass">; ; forward_declare</property> <property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property> <property name="toolbar_pane">0</property>
<property name="tooltip"></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="value"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></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</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bottom_sizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" 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="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_SAVE_BUTTON</property>
<property name="label">Save All Changes</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">save_button</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> </object>
</object> </object>