From: <oma...@us...> - 2009-11-14 19:18:55
|
Revision: 783 http://moneymanagerex.svn.sourceforge.net/moneymanagerex/?rev=783&view=rev Author: omalleypat Date: 2009-11-14 19:18:47 +0000 (Sat, 14 Nov 2009) Log Message: ----------- Preliminary implementation of a recent files list. Currently it doesn't remove any duplicates, but that would be good in the future. I added five items to the ini db, FILEHISTORY1 through FILEHISTORY5 Modified Paths: -------------- trunk/mmex/src/guiid.h trunk/mmex/src/mmex.cpp trunk/mmex/src/mmex.h Modified: trunk/mmex/src/guiid.h =================================================================== --- trunk/mmex/src/guiid.h 2009-11-14 14:25:14 UTC (rev 782) +++ trunk/mmex/src/guiid.h 2009-11-14 19:18:47 UTC (rev 783) @@ -49,6 +49,15 @@ MENU_OPEN, MENU_SAVE, MENU_SAVE_AS, + //Keep this block in order --- + MENU_RECENT, // + MENU_RECENT_1, // + MENU_RECENT_2, // + MENU_RECENT_3, // + MENU_RECENT_4, // + MENU_RECENT_5, // + MENU_RECENT_CLEAR, // + //---------------------------- MENU_EXPORT, MENU_QUIT, MENU_ABOUT, Modified: trunk/mmex/src/mmex.cpp =================================================================== --- trunk/mmex/src/mmex.cpp 2009-11-14 14:25:14 UTC (rev 782) +++ trunk/mmex/src/mmex.cpp 2009-11-14 19:18:47 UTC (rev 783) @@ -340,6 +340,12 @@ EVT_MENU(MENU_NEW, mmGUIFrame::OnNew) EVT_MENU(MENU_OPEN, mmGUIFrame::OnOpen) EVT_MENU(MENU_SAVE_AS, mmGUIFrame::OnSaveAs) + EVT_MENU(MENU_RECENT_1, mmGUIFrame::OnOpenRecent) + EVT_MENU(MENU_RECENT_2, mmGUIFrame::OnOpenRecent) + EVT_MENU(MENU_RECENT_3, mmGUIFrame::OnOpenRecent) + EVT_MENU(MENU_RECENT_4, mmGUIFrame::OnOpenRecent) + EVT_MENU(MENU_RECENT_5, mmGUIFrame::OnOpenRecent) + EVT_MENU(MENU_RECENT_CLEAR, mmGUIFrame::OnRecentFilesClear) EVT_MENU(MENU_CONVERT_ENC_DB, mmGUIFrame::OnConvertEncryptedDB) EVT_MENU(MENU_EXPORT_CSV, mmGUIFrame::OnExport) EVT_MENU(MENU_EXPORT_QIF, mmGUIFrame::OnExportToQIF) @@ -560,13 +566,14 @@ wxString printHeaderBase = mmIniOptions::appName_; printer_-> SetHeader( printHeaderBase + wxT("(@PAGENUM@/@PAGESCNT@)<hr>"), wxPAGE_ALL); + /* Load from Settings DB */ + loadConfigFile(); + /* Create the Controls for the frame */ createMenu(); createToolBar(); createControls(); - /* Load from Settings DB */ - loadConfigFile(); // add the toolbars to the manager m_mgr.AddPane(toolBar_, wxAuiPaneInfo(). @@ -2253,33 +2260,37 @@ toolBarBitmaps[8] = wxBitmap(edit_account_xpm); toolBarBitmaps[9] = wxBitmap(delete_account_xpm); - wxMenu *menuFile = new wxMenu; - wxMenuItem* menuItemNew = new wxMenuItem(menuFile, MENU_NEW, + menuFile_ = new wxMenu; + wxMenuItem* menuItemNew = new wxMenuItem(menuFile_, MENU_NEW, _("&New Database\tCtrl-N"), _("New Database")); menuItemNew->SetBitmap(toolBarBitmaps[0]); - wxMenuItem* menuItemOpen = new wxMenuItem(menuFile, MENU_OPEN, + wxMenuItem* menuItemOpen = new wxMenuItem(menuFile_, MENU_OPEN, _("&Open Database\tCtrl-O"), _("Open Database")); menuItemOpen->SetBitmap(toolBarBitmaps[1]); - menuFile->Append(menuItemNew); - menuFile->Append(menuItemOpen); + menuFile_->Append(menuItemNew); + menuFile_->Append(menuItemOpen); - wxMenuItem* menuItemSaveAs = new wxMenuItem(menuFile, MENU_SAVE_AS, + wxMenuItem* menuItemSaveAs = new wxMenuItem(menuFile_, MENU_SAVE_AS, _("Save Database &As"), _("Save Database As")); menuItemSaveAs->SetBitmap(wxBitmap(saveas_xpm)); - menuFile->Append(menuItemSaveAs); + menuFile_->Append(menuItemSaveAs); - menuFile->AppendSeparator(); - + menuFile_->AppendSeparator(); + + // Create the recently used files list + recentMenu_ = new wxMenu; + RecentFilesMenu(); + wxMenu* exportMenu = new wxMenu; exportMenu->Append(MENU_EXPORT_CSV, _("&CSV Files"), _("Export to CSV")); exportMenu->Append(MENU_EXPORT_QIF, _("&QIF Files"), _("Export to QIF")); exportMenu->Append(MENU_EXPORT_HTML, _("&Report to HTML"), _("Export to HTML")); - menuFile->Append(MENU_EXPORT, _("&Export"), exportMenu); + menuFile_->Append(MENU_EXPORT, _("&Export"), exportMenu); wxMenu* importMenu = new wxMenu; importMenu->Append(MENU_IMPORT_QIF, _("&QIF Files"), _("Import from QIF")); @@ -2289,35 +2300,35 @@ if (mmIniOptions::enableImportMMNETCSV_) importMenu->Append(MENU_IMPORT_MMNETCSV, _("MM.&NET CSV Files"), _("Import from MM.NET CSV")); //importMenu->Append(MENU_IMPORT_QFX, _("&QFX Files"), _("Import from QFX")); - menuFile->Append(MENU_IMPORT, _("&Import"), importMenu); + menuFile_->Append(MENU_IMPORT, _("&Import"), importMenu); - menuFile->AppendSeparator(); + menuFile_->AppendSeparator(); - wxMenuItem* menuItemPrintSetup = new wxMenuItem(menuFile, MENU_PRINT_PAGE_SETUP, + wxMenuItem* menuItemPrintSetup = new wxMenuItem(menuFile_, MENU_PRINT_PAGE_SETUP, _("Page Set&up..."), _("Setup page printing options")); menuItemPrintSetup->SetBitmap(toolBarBitmaps[7]); - menuFile->Append(menuItemPrintSetup); + menuFile_->Append(menuItemPrintSetup); wxMenu* printPreviewMenu = new wxMenu; printPreviewMenu->Append(MENU_PRINT_PREVIEW_REPORT, _("Current &View"), _("Preview current report")); - menuFile->Append(MENU_PRINT_PREVIEW, _("Print Pre&view..."), printPreviewMenu); + menuFile_->Append(MENU_PRINT_PREVIEW, _("Print Pre&view..."), printPreviewMenu); wxMenu* printMenu = new wxMenu; wxMenuItem* menuItemPrintView = new wxMenuItem(printMenu, MENU_PRINT_REPORT, _("Current &View"), _("Print current report")); printMenu->Append(menuItemPrintView); - menuFile->Append( MENU_PRINT, _("&Print..."), printMenu); + menuFile_->Append( MENU_PRINT, _("&Print..."), printMenu); - menuFile->AppendSeparator(); + menuFile_->AppendSeparator(); - wxMenuItem* menuItemQuit = new wxMenuItem(menuFile, wxID_EXIT, + wxMenuItem* menuItemQuit = new wxMenuItem(menuFile_, wxID_EXIT, _("E&xit\tAlt-X"), _("Quit this program")); menuItemQuit->SetBitmap(wxBitmap(exit_xpm)); - menuFile->Append(menuItemQuit); + menuFile_->Append(menuItemQuit); wxMenu *menuView = new wxMenu; @@ -2480,7 +2491,7 @@ menuHelp->Append(menuItemAbout); menuBar_ = new wxMenuBar; - menuBar_->Append(menuFile, _("&File")); + menuBar_->Append(menuFile_, _("&File")); menuBar_->Append(menuAccounts, _("&Accounts")); menuBar_->Append(menuTools, _("&Tools")); menuBar_->Append(menuView, _("&View")); @@ -2701,7 +2712,97 @@ mmDBWrapper::setINISettingValue(inidb_.get(), wxT("LASTFILENAME"), wxGetEmptyString()); showBeginAppDialog(); } + else + { + //File successfully opened, so we need to update history, + //Unless we are opening the same file as before + if (!fileName.IsSameAs(mmDBWrapper::getINISettingValue(inidb_.get(), wxT("LASTFILENAME"), wxGetEmptyString()))) + UpdateRecentFilesINI(); + } + } + +void mmGUIFrame::RecentFilesMenu() +{ + //First, we need to see if the recent files menu is already there and destroy it if so. + if (menuFile_->FindItem(MENU_RECENT)) + { + menuFile_->Delete(MENU_RECENT); + for (int i=0; i<6; i++) //1-5 are files, 6 is clear + recentMenu_->Delete(MENU_RECENT+i+1); + } + + + wxString recent_ini; + wxString rfq; + for (int i=0; i<5; i++) + { + rfq.Printf(wxT("FILEHIST%d"),i+1); + recent_ini = mmDBWrapper::getINISettingValue(inidb_.get(), rfq, wxGetEmptyString()); + if (recent_ini.IsSameAs(wxGetEmptyString())) + { + break; + } + else + { + recentMenu_->Append(MENU_RECENT+i+1,recent_ini); + } + } + if (recentMenu_->GetMenuItemCount()>0) + { + recentMenu_->Append(MENU_RECENT_CLEAR,_("Clear Recent Files")); + menuFile_->Insert(3,MENU_RECENT,_("Recent Files"),recentMenu_); + //menuFile_->AppendSeparator(); + } + +} + +void mmGUIFrame::OnRecentFilesClear(wxCommandEvent& WXUNUSED(event)) +{ + wxString rfq; + for (int i=0; i<5; i++) + { + rfq.Printf(wxT("FILEHIST%d"),i+1); + mmDBWrapper::setINISettingValue(inidb_.get(), rfq, wxGetEmptyString()); + } + RecentFilesMenu(); +} + +void mmGUIFrame::UpdateRecentFilesINI() +{ + //Take the LASTFILE and bump it into the history, making sure there are no repeats or gaps. + // This is a work in progress... + wxString replacing = mmDBWrapper::getINISettingValue(inidb_.get(), + wxT("LASTFILENAME"), wxGetEmptyString()); + wxString getting_replaced; + // Now bump everybody down + wxString recent_ini; + wxString rfq; + for (int i=0; i<5; i++) + { + //First, get whatever the next value is before we replace it: + rfq.Printf(wxT("FILEHIST%d"),i+1); + getting_replaced = mmDBWrapper::getINISettingValue(inidb_.get(), rfq, wxGetEmptyString()); + + if (i==0 && (getting_replaced.IsSameAs(replacing))) + break; //LASTFILENAME was reopened (ie at program launch, no need to continue + + //Next, replace it with the one above in the list + mmDBWrapper::setINISettingValue(inidb_.get(), rfq, replacing); + + // Get ready for the next iteration + if (!getting_replaced.IsSameAs(wxGetEmptyString())) + { + replacing = getting_replaced; + } + else + { + break; + } + } + RecentFilesMenu(); + saveConfigFile(); +} //---------------------------------------------------------------------------- void mmGUIFrame::OnNew(wxCommandEvent& /*event*/) @@ -2742,6 +2843,15 @@ openFile(fileName, false); } } + +void mmGUIFrame::OnOpenRecent(wxCommandEvent& event) +{ + wxString rfq; + rfq.Printf(wxT("FILEHIST%d"),event.GetId()-MENU_RECENT); + wxString fileName = mmDBWrapper::getINISettingValue(inidb_.get(), rfq, wxGetEmptyString()); + openFile(fileName, false); +} + //---------------------------------------------------------------------------- void mmGUIFrame::OnConvertEncryptedDB(wxCommandEvent& /*event*/) Modified: trunk/mmex/src/mmex.h =================================================================== --- trunk/mmex/src/mmex.h 2009-11-14 14:25:14 UTC (rev 782) +++ trunk/mmex/src/mmex.h 2009-11-14 19:18:47 UTC (rev 783) @@ -106,6 +106,10 @@ wxToolBar* toolBar_; mmTreeItemData* selectedItemData_; wxMenuItem* menuItemOnlineUpdateCurRate_; // Menu Item for Disabling Item + + //We need to be able to update these on the fly + wxMenu* recentMenu_; + wxMenu* menuFile_; /* printing */ boost::scoped_ptr<wxHtmlEasyPrinting> printer_; @@ -198,6 +202,10 @@ void OnViewFavoriteAccounts(wxCommandEvent& event); void OnViewOpenAccounts(wxCommandEvent& event); + void RecentFilesMenu(); + void UpdateRecentFilesINI(); + void OnRecentFilesClear(wxCommandEvent& WXUNUSED(event)); + void OnOpenRecent(wxCommandEvent& event); // any class wishing to process wxWindows events must use this macro DECLARE_EVENT_TABLE() }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |