// Licence:
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
- #pragma implementation "configtoolview.cpp"
-#endif
-
-// Includes other headers for precompiled compilation
-#include "wx/wx.h"
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
#ifdef __BORLANDC__
- #pragma hdrstop
+#pragma hdrstop
#endif
#include "wx/wfstream.h"
-
+#include "wx/txtstrm.h"
#include "configtoolview.h"
#include "configtooldoc.h"
#include "configtree.h"
EVT_UPDATE_UI(ctID_EDIT_CUSTOM_PROPERTY, ctConfigToolView::OnUpdateEditCustomProperty)
EVT_UPDATE_UI(ctID_DELETE_CUSTOM_PROPERTY, ctConfigToolView::OnUpdateDeleteCustomProperty)
- EVT_NOTEBOOK_PAGE_CHANGED(-1, ctConfigToolView::OnTabSelect)
+ EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, ctConfigToolView::OnTabSelect)
EVT_MENU(ctID_SAVE_SETUP_FILE, ctConfigToolView::OnSaveSetupFile)
EVT_MENU(ctID_SAVE_CONFIGURE_COMMAND, ctConfigToolView::OnSaveConfigureCommand)
EVT_UPDATE_UI(ctID_SAVE_SETUP_FILE, ctConfigToolView::OnUpdateSaveSetupFile)
EVT_UPDATE_UI(ctID_SAVE_CONFIGURE_COMMAND, ctConfigToolView::OnUpdateSaveConfigureCommand)
-END_EVENT_TABLE()
-ctConfigToolView::ctConfigToolView()
-{
-}
+ EVT_MENU(wxID_FIND, ctConfigToolView::OnFind)
+ EVT_UPDATE_UI(wxID_FIND, ctConfigToolView::OnUpdateFind)
+
+ EVT_MENU(ctID_GO, ctConfigToolView::OnGo)
+ EVT_UPDATE_UI(ctID_GO, ctConfigToolView::OnUpdateGo)
+
+END_EVENT_TABLE()
// What to do when a view is created. Creates actual
// windows for displaying the view.
bool ctConfigToolView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
{
- wxGetApp().GetDocManager()->ActivateView(this, TRUE);
+ wxGetApp().GetDocManager()->ActivateView(this, true);
wxGetApp().GetMainFrame()->SetDocument((ctConfigToolDoc*) doc);
wxGetApp().GetMainFrame()->GetSetupPage()->SetDocument((ctConfigToolDoc*) doc) ;
wxGetApp().GetMainFrame()->GetConfigurePage()->SetDocument((ctConfigToolDoc*) doc) ;
- return TRUE;
+ return true;
}
-void ctConfigToolView::OnDraw(wxDC *dc)
+void ctConfigToolView::OnDraw(wxDC *WXUNUSED(dc))
{
}
ctConfigTreeCtrl* treeCtrl = wxGetApp().GetMainFrame()->GetConfigTreeCtrl();
if (!treeCtrl)
return;
-
+
wxASSERT (doc != NULL);
-
+
ctConfigItem* selItem = NULL;
-
+
wxTreeItemId sel = treeCtrl->GetSelection();
if (sel.IsOk())
{
if (data)
selItem = data->GetConfigItem() ;
}
-
+
ctConfigToolHint* hint = (ctConfigToolHint*) hintObj;
int hintOp = ctNoHint;
if (hint)
hintOp = hint->m_op;
-
+
switch (hintOp)
{
case ctInitialUpdate:
}
}
break;
- case ctSelChanged:
+ case ctSelChanged:
{
if (selItem)
{
wxGetApp().GetMainFrame()->GetPropertyEditor()->ShowItem(selItem);
- }
+ }
}
break;
case ctAllSaved:
treeCtrl->DeleteAllItems();
wxGetApp().GetMainFrame()->GetPropertyEditor()->ShowItem(NULL);
break;
- }
+ }
case ctValueChanged:
{
// ctConfigItem& ti = *(ctConfigItem *)hint->m_item;
wxGetApp().GetMainFrame()->GetPropertyEditor()->ShowItem(selItem);
- }
+ }
break;
-
+
default:
break;
}
}
// Clean up windows used for displaying the view.
-bool ctConfigToolView::OnClose(bool deleteWindow)
+bool ctConfigToolView::OnClose(bool WXUNUSED(deleteWindow))
{
if (!GetDocument()->Close())
- return FALSE;
+ return false;
ctConfigToolHint hint(NULL, ctClear);
GetDocument()->UpdateAllViews (NULL, & hint);
- wxGetApp().GetDocManager()->ActivateView(this, FALSE);
+ wxGetApp().GetDocManager()->ActivateView(this, false);
+
+ Activate(false);
- Activate(FALSE);
-
wxGetApp().GetMainFrame()->SetDocument(NULL);
wxGetApp().GetMainFrame()->GetSetupPage()->SetDocument(NULL) ;
wxGetApp().GetMainFrame()->GetConfigurePage()->SetDocument(NULL) ;
- return TRUE;
+ return true;
}
void ctConfigToolView::OnChangeFilename()
// General disabler
void ctConfigToolView::OnUpdateDisable(wxUpdateUIEvent& event)
{
- event.Enable( FALSE );
+ event.Enable( false );
}
void ctConfigToolView::OnUpdateAddItem(wxUpdateUIEvent& event)
{
- event.Enable( TRUE );
+ event.Enable( true );
}
/// Add item and its children to the tree
{
if (!item->GetParent())
{
- item->SetTreeItem(treeControl->AddRoot(_(""), -1, -1, new ctTreeItemData(item)));
+ item->SetTreeItem(treeControl->AddRoot(wxEmptyString, -1, -1, new ctTreeItemData(item)));
}
else
{
item->Enable(!item->IsEnabled());
- GetDocument()->Modify(TRUE);
+ GetDocument()->Modify(true);
OnChangeFilename();
SyncItem(treeControl, item);
wxList considered;
- item->PropagateChange(considered);
if ((item->GetType() == ctTypeBoolRadio || item->GetType() == ctTypeRadioGroup) && item->IsEnabled())
{
item->PropagateRadioButton(considered);
}
+ item->PropagateChange(considered);
+
+ // Update the setup.h and configure text
+ if (wxGetApp().GetMainFrame()->GetMainNotebook()->GetSelection() > 0)
+ {
+ RegenerateSetup();
+ }
}
}
}
/// Add a checkbox item
-void ctConfigToolView::OnAddCheckBoxItem(wxCommandEvent& event)
+void ctConfigToolView::OnAddCheckBoxItem(wxCommandEvent& WXUNUSED(event))
{
AddItem(ctTypeBoolCheck, _("New checkbox item"));
}
/// Add a radiobutton item
-void ctConfigToolView::OnAddRadioButtonItem(wxCommandEvent& event)
+void ctConfigToolView::OnAddRadioButtonItem(wxCommandEvent& WXUNUSED(event))
{
AddItem(ctTypeBoolRadio, _("New radio button item"));
}
/// Add a group item
-void ctConfigToolView::OnAddGroupItem(wxCommandEvent& event)
+void ctConfigToolView::OnAddGroupItem(wxCommandEvent& WXUNUSED(event))
{
AddItem(ctTypeGroup, _("New group item"));
}
/// Add a group option item
-void ctConfigToolView::OnAddCheckGroupItem(wxCommandEvent& event)
+void ctConfigToolView::OnAddCheckGroupItem(wxCommandEvent& WXUNUSED(event))
{
AddItem(ctTypeCheckGroup, _("New check group item"));
}
/// Add a group option item
-void ctConfigToolView::OnAddRadioGroupItem(wxCommandEvent& event)
+void ctConfigToolView::OnAddRadioGroupItem(wxCommandEvent& WXUNUSED(event))
{
AddItem(ctTypeRadioGroup, _("New radio group item"));
}
/// Add a string item
-void ctConfigToolView::OnAddStringItem(wxCommandEvent& event)
+void ctConfigToolView::OnAddStringItem(wxCommandEvent& WXUNUSED(event))
{
AddItem(ctTypeString, _("New string item"));
}
ctConfigItem* sel = GetSelection();
if (sel)
{
- wxString name = wxGetTextFromUser(_("Please enter a name for the new item."),
- msg, wxT(""));
- if (!name.IsEmpty())
+ wxString name = wxGetTextFromUser(_("Please enter a name for the new item."), msg);
+ if (!name.empty())
{
ctConfigItem* parent ;
ctConfigItem* insertBefore ;
parent = sel->GetParent();
insertBefore = sel->FindNextSibling();
}
-
+
ctConfigItem* newItem = new ctConfigItem(NULL, type, name);
newItem->InitProperties();
}
/// Delete an item
-void ctConfigToolView::OnDeleteItem(wxCommandEvent& event)
+void ctConfigToolView::OnDeleteItem(wxCommandEvent& WXUNUSED(event))
{
ctConfigItem* sel = GetSelection();
if (sel)
{
+ wxString name(sel->GetName());
wxString msg;
- msg.Printf(_("Delete %s?"), sel->GetName());
+ msg.Printf(_("Delete %s?"), (const wxChar*) name);
if (wxYES == wxMessageBox(msg, _("Delete item"), wxICON_QUESTION|wxYES_NO))
{
wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->Delete(sel->GetTreeItemId());
}
/// Rename an item
-void ctConfigToolView::OnRenameItem(wxCommandEvent& event)
+void ctConfigToolView::OnRenameItem(wxCommandEvent& WXUNUSED(event))
{
ctConfigItem* sel = GetSelection();
if (sel)
{
wxString name = wxGetTextFromUser(_("Please enter a new name for the item."),
_("Rename item"), sel->GetName());
- if (!name.IsEmpty())
+ if (!name.empty())
{
sel->SetName(name);
SyncItem(wxGetApp().GetMainFrame()->GetConfigTreeCtrl(), sel);
}
/// Copy an item to the clipboard
-void ctConfigToolView::OnCopy(wxCommandEvent& event)
+void ctConfigToolView::OnCopy(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = GetSelection();
}
/// Copy an item to the clipboard and cut the item
-void ctConfigToolView::OnCut(wxCommandEvent& event)
+void ctConfigToolView::OnCut(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = GetSelection();
}
/// Paste an item from the clipboard to the tree
-void ctConfigToolView::OnPaste(wxCommandEvent& event)
+void ctConfigToolView::OnPaste(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = GetSelection();
}
/// Copy an item to the clipboard
-void ctConfigToolView::OnContextCopy(wxCommandEvent& event)
+void ctConfigToolView::OnContextCopy(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->GetContextItem();
}
/// Copy an item to the clipboard and cut the item
-void ctConfigToolView::OnContextCut(wxCommandEvent& event)
+void ctConfigToolView::OnContextCut(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->GetContextItem();
}
/// Paste an item from the clipboard to the tree
-void ctConfigToolView::OnContextPasteBefore(wxCommandEvent& event)
+void ctConfigToolView::OnContextPasteBefore(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->GetContextItem();
}
/// Paste an item from the clipboard to the tree
-void ctConfigToolView::OnContextPasteAfter(wxCommandEvent& event)
+void ctConfigToolView::OnContextPasteAfter(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->GetContextItem();
}
/// Paste an item from the clipboard to the tree
-void ctConfigToolView::OnContextPasteAsChild(wxCommandEvent& event)
+void ctConfigToolView::OnContextPasteAsChild(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->GetContextItem();
{
ctConfigItem* parent = sel;
ctConfigItem* insertBefore = NULL;
-
+
ctConfigItem* newItem = doc->GetClipboardItem()->DeepClone();
ctConfigCommand* cmd = new ctConfigCommand(wxT("Paste Config Item"), ctCMD_PASTE,
NULL, newItem, parent, insertBefore);
}
/// Item help
-void ctConfigToolView::OnItemHelp(wxCommandEvent& event)
+void ctConfigToolView::OnItemHelp(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
if ( doc && GetSelection() )
{
wxString helpTopic = GetSelection()->GetPropertyString(wxT("help-topic"));
- if (!helpTopic.IsEmpty())
+ if (!helpTopic.empty())
{
wxGetApp().GetReferenceHelpController().DisplaySection(helpTopic);
}
}
/// Add a custom property
-void ctConfigToolView::OnAddCustomProperty(wxCommandEvent& event)
+void ctConfigToolView::OnAddCustomProperty(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = GetSelection();
if (doc && sel && editor)
{
ctCustomPropertyDialog dialog(wxGetApp().GetMainFrame(),
- -1, _("Add a custom property"));
+ wxID_ANY, _("Add a custom property"));
if (dialog.ShowModal() == wxID_OK)
{
wxString name = dialog.GetPropertyName();
}
ctProperty* property = new ctProperty;
if (type == wxT("bool"))
- property->GetVariant() = wxVariant((bool) FALSE, name);
+ property->GetVariant() = wxVariant(false, name);
else if (type == wxT("double"))
property->GetVariant() = wxVariant((double) 0.0, name);
else if (type == wxT("long"))
property->GetVariant() = wxVariant((long) 0, name);
else
- property->GetVariant() = wxVariant(wxT(""), name);
- property->SetCustom(TRUE);
+ property->GetVariant() = wxVariant(wxEmptyString, name);
+ property->SetCustom(true);
property->SetDescription(descr);
property->SetChoices(choices);
property->SetEditorType(editorType);
}
/// Edit a custom property
-void ctConfigToolView::OnEditCustomProperty(wxCommandEvent& event)
+void ctConfigToolView::OnEditCustomProperty(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = GetSelection();
wxString oldType = property->GetVariant().GetType();
wxString oldEditorType = property->GetEditorType();
wxArrayString oldChoices = property->GetChoices();
-
+
ctCustomPropertyDialog dialog(wxGetApp().GetMainFrame(),
- -1, _("Edit custom property"));
+ wxID_ANY, _("Edit custom property"));
dialog.SetPropertyName(oldName);
dialog.SetPropertyType(oldType);
dialog.SetPropertyDescription(oldDescription);
wxString editorType = dialog.GetEditorType();
wxArrayString choices = dialog.GetChoices();
wxString descr = dialog.GetPropertyDescription();
-
+
if (name != oldName && sel->GetProperties().FindProperty(name))
{
wxMessageBox(_("Sorry, this name already exists."), _T("Add custom property"),
if (type != oldType)
{
if (type == wxT("bool"))
- property->GetVariant() = wxVariant((bool) FALSE, name);
+ property->GetVariant() = wxVariant(false, name);
else if (type == wxT("double"))
property->GetVariant() = wxVariant((double) 0.0, name);
else if (type == wxT("long"))
property->GetVariant() = wxVariant((long) 0, name);
else
- property->GetVariant() = wxVariant(wxT(""), name);
+ property->GetVariant() = wxVariant(wxEmptyString, name);
}
if (name != oldName)
property->GetVariant().SetName(name);
if (name != oldName)
property->GetVariant().SetName(name);
- property->SetCustom(TRUE);
+ property->SetCustom(true);
if (descr != oldDescription)
property->SetDescription(descr);
-
+
editor->ShowItem(sel);
OnChangeFilename();
}
}
/// Delete a custom property
-void ctConfigToolView::OnDeleteCustomProperty(wxCommandEvent& event)
+void ctConfigToolView::OnDeleteCustomProperty(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
ctConfigItem* sel = GetSelection();
}
}
-void ctConfigToolView::OnSaveSetupFile(wxCommandEvent& event)
+void ctConfigToolView::OnSaveSetupFile(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
wxString setupStr = doc->GenerateSetup();
wxString filename = _T("setup.h");
- wxString path = doc->GetFrameworkDir(FALSE);
+ wxString path = wxGetApp().GetSettings().m_lastSetupSaveDir;
+ if (path.empty())
+ path = doc->GetFrameworkDir(false);
wxString wildcard = _T("Header files (*.h)|*.h|All files (*.*)|*.*");
-
+
wxFileDialog dialog(wxTheApp->GetTopWindow(),
_("Save Setup File As"),
path, filename ,
- wildcard, wxSAVE|wxOVERWRITE_PROMPT);
-
+ wildcard, wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
+
if (dialog.ShowModal() == wxID_OK)
{
wxString fullPath = dialog.GetPath();
+ wxGetApp().GetSettings().m_lastSetupSaveDir = wxPathOnly(fullPath);
- // TODO: save last saved path in settings.
-
- wxFileOutputStream stream(fullPath);
- if (!stream.Ok())
+ wxFileOutputStream osFile(fullPath);
+ if (!osFile.Ok())
{
wxMessageBox(_("Sorry, could not save this file."), _("Save Setup File"), wxICON_EXCLAMATION|wxOK);
return;
}
+ wxTextOutputStream stream(osFile);
stream << setupStr;
- }
+ }
}
-void ctConfigToolView::OnSaveConfigureCommand(wxCommandEvent& event)
+void ctConfigToolView::OnSaveConfigureCommand(wxCommandEvent& WXUNUSED(event))
{
ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
wxString configureStr = doc->GenerateConfigureCommand();
wxString filename = _T("configurewx.sh");
- wxString path = doc->GetFrameworkDir(FALSE);
+ wxString path = wxGetApp().GetSettings().m_lastSetupSaveDir;
+ if (path.empty())
+ path = doc->GetFrameworkDir(false);
wxString wildcard = _T("Shell script files (*.sh)|*.sh|All files (*.*)|*.*");
-
+
wxFileDialog dialog(wxTheApp->GetTopWindow(),
_("Save Configure Command File As"),
path, filename ,
- wildcard, wxSAVE|wxOVERWRITE_PROMPT);
-
+ wildcard, wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
+
if (dialog.ShowModal() == wxID_OK)
{
wxString fullPath = dialog.GetPath();
+ wxGetApp().GetSettings().m_lastSetupSaveDir = wxPathOnly(fullPath);
- // TODO: save last saved path in settings.
-
- wxFileOutputStream stream(fullPath);
- if (!stream.Ok())
+ wxFileOutputStream osFile(fullPath);
+ if (!osFile.Ok())
{
wxMessageBox(_("Sorry, could not save this file."), _("Save Configure Command File"), wxICON_EXCLAMATION|wxOK);
return;
}
+ wxTextOutputStream stream(osFile);
stream << configureStr;
- }
+ }
}
void ctConfigToolView::OnUpdateSaveSetupFile(wxUpdateUIEvent& event)
{
- event.Enable(TRUE);
+ event.Enable(true);
}
void ctConfigToolView::OnUpdateSaveConfigureCommand(wxUpdateUIEvent& event)
{
- event.Enable(TRUE);
+ event.Enable(true);
+}
+
+/// Find text
+void ctConfigToolView::OnFind(wxCommandEvent& WXUNUSED(event))
+{
+ ctFindReplaceDialog* dialog = wxGetApp().GetMainFrame()->GetFindDialog();
+ if (dialog)
+ {
+ dialog->Raise();
+ }
+
+ if (!dialog)
+ {
+ int style = wxFR_NOUPDOWN;
+ wxString caption(wxT("Find text in settings"));
+ int flags = wxFR_DOWN;
+ if (wxGetApp().GetSettings().m_matchCase)
+ flags|=wxFR_MATCHCASE;
+ if (wxGetApp().GetSettings().m_matchWholeWord)
+ flags|=wxFR_WHOLEWORD;
+
+ ctFindReplaceDialog::sm_findData.SetFlags(flags);
+
+ dialog = new ctFindReplaceDialog(wxGetApp().GetMainFrame(), caption, style);
+ dialog->Show(true);
+ }
+}
+
+/// Update find text
+void ctConfigToolView::OnUpdateFind(wxUpdateUIEvent& event)
+{
+ event.Enable(true);
+}
+
+/// Save default file type
+void ctConfigToolView::OnGo(wxCommandEvent& WXUNUSED(event))
+{
+ ctConfigToolDoc* doc = (ctConfigToolDoc*) GetDocument();
+ wxString path = wxGetApp().GetSettings().m_lastSetupSaveDir;
+ if (!path.empty())
+ {
+ if (wxGetApp().GetSettings().m_defaultFileKind == wxT("Setup file"))
+ {
+ // setup.h
+ wxString setupStr = doc->GenerateSetup();
+
+ wxString fullPath = path + wxFILE_SEP_PATH + wxT("setup.h");
+ if (wxFileExists(fullPath))
+ {
+ wxString msg;
+ msg.Printf(wxT("Overwrite existing file %s?"), (const wxChar*) fullPath);
+ int ans = wxMessageBox(msg, _("Save Setup File"), wxICON_QUESTION|wxYES_NO|wxCANCEL);
+ if (ans == wxCANCEL)
+ return;
+ if (ans == wxNO)
+ return;
+ }
+ wxFileOutputStream stream(fullPath);
+ if (!stream.Ok())
+ {
+ wxMessageBox(_("Sorry, could not save this file."), _("Save Setup File"), wxICON_EXCLAMATION|wxOK);
+ return;
+ }
+ stream << setupStr;
+ }
+ else if (wxGetApp().GetSettings().m_defaultFileKind == wxT("Configure script"))
+ {
+ // configurewx.sh
+ wxString configureStr = doc->GenerateConfigureCommand();
+
+ wxString fullPath = path + wxFILE_SEP_PATH + wxT("configurewx.sh");
+ if (wxFileExists(fullPath))
+ {
+ wxString msg;
+ msg.Printf(wxT("Overwrite existing file %s?"), (const wxChar*) fullPath);
+ int ans = wxMessageBox(msg, _("Save Configure Script"), wxICON_QUESTION|wxYES_NO|wxCANCEL);
+ if (ans == wxCANCEL)
+ return;
+ if (ans == wxNO)
+ return;
+ }
+ wxFileOutputStream stream(fullPath);
+ if (!stream.Ok())
+ {
+ wxMessageBox(_("Sorry, could not save this file."), _("Save Configure Script"), wxICON_EXCLAMATION|wxOK);
+ return;
+ }
+ stream << configureStr;
+ }
+ else
+ {
+ wxMessageBox(wxT("Unrecognised default file type."));
+ }
+ }
+}
+
+/// Update
+void ctConfigToolView::OnUpdateGo(wxUpdateUIEvent& event)
+{
+ wxString path = wxGetApp().GetSettings().m_lastSetupSaveDir;
+ event.Enable(!path.empty());
+}
+
+//----------------------------------------------------------------------------
+// ctFindReplaceDialog
+//----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(ctFindReplaceDialog, wxFindReplaceDialog)
+ EVT_FIND(wxID_ANY, ctFindReplaceDialog::OnFind)
+ EVT_FIND_NEXT(wxID_ANY, ctFindReplaceDialog::OnFind)
+ EVT_FIND_CLOSE(wxID_ANY, ctFindReplaceDialog::OnClose)
+END_EVENT_TABLE()
+
+wxFindReplaceData ctFindReplaceDialog::sm_findData;
+wxString ctFindReplaceDialog::sm_currentItem = wxEmptyString;
+
+ctFindReplaceDialog::ctFindReplaceDialog( wxWindow *parent, const wxString& title,
+ long style):
+ wxFindReplaceDialog( parent, & sm_findData, title, style )
+{
+ sm_currentItem = wxEmptyString;
+
+ if (parent)
+ ((ctMainFrame*) parent)->SetFindDialog(this);
+}
+
+void ctFindReplaceDialog::OnFind(wxFindDialogEvent& event)
+{
+ wxString textToFind = event.GetFindString();
+ bool matchCase = ((event.GetFlags() & wxFR_MATCHCASE) != 0);
+ bool wholeWord = ((event.GetFlags() & wxFR_WHOLEWORD) != 0);
+
+ wxGetApp().GetSettings().m_matchCase = matchCase;
+ wxGetApp().GetSettings().m_matchWholeWord = wholeWord;
+
+ if (!DoFind(textToFind, matchCase, wholeWord))
+ {
+ wxMessageBox(wxT("No more matches."), wxT("Search"), wxOK|wxICON_INFORMATION, this);
+ }
+}
+
+bool ctFindReplaceDialog::DoFind(const wxString& textToFind, bool matchCase, bool wholeWord, bool wrap)
+{
+ ctConfigToolDoc* doc = wxGetApp().GetMainFrame()->GetDocument();
+ if (!doc)
+ return false;
+ ctConfigToolView* view = (ctConfigToolView*) doc->GetFirstView();
+
+ ctConfigItem* currentItem = NULL;
+ ctConfigItem* focusItem = view->GetSelection();
+ if (!focusItem)
+ {
+ focusItem = doc->GetTopItem();
+ if (!focusItem)
+ return false;
+ }
+
+ if (!sm_currentItem.empty())
+ {
+ currentItem = doc->GetTopItem()->FindItem(sm_currentItem);
+ }
+
+ // If we were at this item last time, skip the first one.
+ bool skipFirstItem = (currentItem == focusItem);
+ currentItem = FindNextItem(doc, currentItem, textToFind, matchCase, wholeWord, wrap,
+ skipFirstItem);
+
+ if (currentItem)
+ {
+ sm_currentItem = currentItem->GetName();
+ wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->SelectItem(currentItem->GetTreeItemId());
+ return true;
+ }
+ else
+ {
+ sm_currentItem = wxEmptyString;
+ }
+
+ return false;
+}
+
+ctConfigItem* ctFindReplaceDialog::FindNextItem(ctConfigToolDoc* doc,
+ ctConfigItem* item,
+ const wxString& text,
+ bool matchCase,
+ bool matchWordOnly,
+ bool wrap,
+ bool skipFirst)
+{
+ ctConfigItem* firstInDoc = NULL;
+
+ wxString text2(text);
+ if (!matchCase)
+ text2.MakeLower();
+
+ ctConfigItem* found = NULL;
+ ctConfigItem* next = item;
+
+ int i = 0;
+ do
+ {
+ // If starting the search from beginning, we can now
+ // set the value of 'item' in the 2nd iteration without immediately
+ // dropping out of the while loop because card == next
+ if (!item && (i > 0))
+ item = firstInDoc;
+
+ // We might want to start from this item if skipFirst is false.
+ if ((i == 0) && !skipFirst && next)
+ {
+ }
+ else
+ next = doc->FindNextItem(next, wrap);
+
+ // Save to be used in iteration 2
+ if ((i == 0) && !item)
+ firstInDoc = next;
+
+ if (next)
+ {
+ wxString str(next->GetName());
+ wxString description(next->GetPropertyString(wxT("description")));
+ wxString notes(next->GetPropertyString(wxT("notes")));
+ if (!matchCase)
+ {
+ str.MakeLower();
+ description.MakeLower();
+ notes.MakeLower();
+ }
+ if (ctMatchString(str, text2, matchWordOnly) ||
+ ctMatchString(description, text2, matchWordOnly) ||
+ ctMatchString(notes, text2, matchWordOnly))
+ {
+ found = next;
+ }
+ }
+ else
+ break; // Didn't find an item at all
+
+ i ++;
+ }
+ while (!found && item != next);
+
+ if (item == found && !firstInDoc)
+ return NULL;
+ else
+ return found;
+}
+
+void ctFindReplaceDialog::OnClose(wxFindDialogEvent& event)
+{
+ bool matchCase = ((event.GetFlags() & wxFR_MATCHCASE) != 0);
+ bool wholeWord = ((event.GetFlags() & wxFR_WHOLEWORD) != 0);
+ wxGetApp().GetSettings().m_matchCase = matchCase;
+ wxGetApp().GetSettings().m_matchWholeWord = wholeWord;
+
+ this->Destroy();
+ ((ctMainFrame*) GetParent())->SetFindDialog(NULL);
}