diff --git a/pgadmin/dlg/dlgAddFavourite.cpp b/pgadmin/dlg/dlgAddFavourite.cpp
index be7f515..1fb367a 100644
--- a/pgadmin/dlg/dlgAddFavourite.cpp
+++ b/pgadmin/dlg/dlgAddFavourite.cpp
@@ -31,12 +31,14 @@ BEGIN_EVENT_TABLE(dlgAddFavourite, pgDialog)
EVT_TREE_SEL_CHANGED(XRCID("trLocation"), dlgAddFavourite::OnTreeChange)
EVT_BUTTON (wxID_OK, dlgAddFavourite::OnOK)
EVT_BUTTON (wxID_CANCEL, dlgAddFavourite::OnCancel)
+ EVT_BUTTON (XRCID("btnNewFolder"), dlgAddFavourite::OnNewFolder)
END_EVENT_TABLE()
#define btnOK CTRL_BUTTON("wxID_OK")
#define txtTitle CTRL_TEXT("txtTitle")
#define trLocation CTRL_TREE("trLocation")
+#define btnNewFolder CTRL_BUTTON("btnNewFolder")
dlgAddFavourite::dlgAddFavourite(wxWindow *parent, queryFavouriteFolder *favourites) :
@@ -46,6 +48,8 @@ dlgAddFavourite::dlgAddFavourite(wxWindow *parent, queryFavouriteFolder *favouri
LoadResource(parent, wxT("dlgAddFavourite"));
RestorePosition();
+ anythingChanged = false;
+
this->favourites = favourites;
wxImageList *imgList = new wxImageList(16, 16, true, 2);
@@ -58,26 +62,51 @@ dlgAddFavourite::dlgAddFavourite(wxWindow *parent, queryFavouriteFolder *favouri
trLocation->Expand(trLocation->GetRootItem());
}
-bool dlgAddFavourite::AddFavourite(wxString newtext)
+int dlgAddFavourite::AddFavourite(wxString newtext)
{
+ int ret = 1;
int r = ShowModal();
if (r != wxID_OK)
- return false;
+ {
+ if (anythingChanged)
+ // Need rollback!
+ ret = -1;
+ else
+ ret = 0;
+ }
wxString title = txtTitle->GetValue().Trim();
if (title.IsEmpty())
- return false;
+ {
+ if (anythingChanged)
+ // Need rollback!
+ ret = -1;
+ else
+ ret = 0;
+ }
if (!trLocation->GetSelection().IsOk())
- return false;
+ {
+ if (anythingChanged)
+ // Need rollback!
+ ret = -1;
+ else
+ ret = 0;
+ }
queryFavouriteFolder *fld = (queryFavouriteFolder *)favourites->FindTreeItem(trLocation->GetSelection());
if (!fld)
- return false;
+ {
+ if (anythingChanged)
+ // Need rollback!
+ ret = -1;
+ else
+ ret = 0;
+ }
fld->AddNewFavourite(title, newtext);
- return true;
+ return ret;
}
dlgAddFavourite::~dlgAddFavourite()
@@ -120,3 +149,36 @@ void dlgAddFavourite::OnTreeChange(wxTreeEvent &ev)
wxCommandEvent evt;
OnChange(evt);
}
+
+void dlgAddFavourite::OnNewFolder(wxCommandEvent &ev)
+{
+ if (!trLocation->GetSelection().IsOk())
+ return;
+
+ queryFavouriteItem *item = favourites->FindTreeItem(trLocation->GetSelection());
+ if (!item)
+ return;
+ if (item->GetId() != -2)
+ return;
+
+ wxTextEntryDialog dlg(this, _("Enter name of new folder"), _("Create new favourites folder"));
+ if (dlg.ShowModal() != wxID_OK)
+ return;
+
+ wxString title = dlg.GetValue().Trim();
+ if (title.IsEmpty())
+ return;
+
+ queryFavouriteFolder *fld = (queryFavouriteFolder *)item;
+ if (fld->ContainsFolder(title))
+ {
+ wxMessageBox(_("A folder with the specified name already exists."));
+ return;
+ }
+
+
+ queryFavouriteFolder *newfld = fld->AddNewFolder(dlg.GetValue());
+ newfld->SetTreeId(trLocation->AppendItem(trLocation->GetSelection(), title, 0));
+ trLocation->Expand(fld->GetTreeId());
+ anythingChanged = true;
+}
diff --git a/pgadmin/frm/frmQuery.cpp b/pgadmin/frm/frmQuery.cpp
index bd4ded2..0403e91 100644
--- a/pgadmin/frm/frmQuery.cpp
+++ b/pgadmin/frm/frmQuery.cpp
@@ -1503,10 +1503,15 @@ void frmQuery::OnAddFavourite(wxCommandEvent &event)
{
if (sqlQuery->GetText().Trim().IsEmpty())
return;
- if (dlgAddFavourite(this, favourites).AddFavourite(sqlQuery->GetText()))
+ int r = dlgAddFavourite(this, favourites).AddFavourite(sqlQuery->GetText());
+ if (r == 1)
{
// Added a favourite, so save
queryFavouriteFileProvider::SaveFavourites(favourites);
+ }
+ if (r == 1 || r == -1)
+ {
+ // Changed something requiring rollback
mainForm->UpdateAllFavouritesList();
}
}
diff --git a/pgadmin/include/dlg/dlgAddFavourite.h b/pgadmin/include/dlg/dlgAddFavourite.h
index 0cc96f9..17b72f5 100644
--- a/pgadmin/include/dlg/dlgAddFavourite.h
+++ b/pgadmin/include/dlg/dlgAddFavourite.h
@@ -21,7 +21,7 @@ class dlgAddFavourite : public pgDialog
public:
dlgAddFavourite(wxWindow *parent, queryFavouriteFolder *favourites);
~dlgAddFavourite();
- bool AddFavourite(wxString newtext);
+ int AddFavourite(wxString newtext);
private:
queryFavouriteFolder *favourites;
@@ -29,6 +29,10 @@ private:
void OnCancel(wxCommandEvent &ev);
void OnChange(wxCommandEvent &ev);
void OnTreeChange(wxTreeEvent &ev);
+ void OnNewFolder(wxCommandEvent &ev);
+
+ bool anythingChanged;
+
DECLARE_EVENT_TABLE()
};
diff --git a/pgadmin/ui/dlgAddFavourite.xrc b/pgadmin/ui/dlgAddFavourite.xrc
index 26c1252..54e2b72 100644
--- a/pgadmin/ui/dlgAddFavourite.xrc
+++ b/pgadmin/ui/dlgAddFavourite.xrc
@@ -7,7 +7,7 @@
+
+
3
0
@@ -51,14 +68,14 @@
1
- wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL
+ wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTRE_VERTICAL
4
- wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL
+ wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTRE_VERTICAL
4