@@ -240,12 +240,14 @@ void MainWindow::init()
240240 popupTableMenu->addAction (ui->actionEditBrowseTable );
241241 popupTableMenu->addAction (ui->editModifyObjectAction );
242242 popupTableMenu->addAction (ui->editDeleteObjectAction );
243+ popupTableMenu->addAction (ui->fileDetachAction );
243244 popupTableMenu->addSeparator ();
244245 popupTableMenu->addAction (ui->actionEditCopyCreateStatement );
245246 popupTableMenu->addAction (ui->actionExportCsvPopup );
246247
247248 popupSchemaDockMenu = new QMenu (this );
248249 popupSchemaDockMenu->addAction (ui->actionPopupSchemaDockBrowseTable );
250+ popupSchemaDockMenu->addAction (ui->actionPopupSchemaDockDetachDatabase );
249251 popupSchemaDockMenu->addSeparator ();
250252 popupSchemaDockMenu->addAction (ui->actionDropQualifiedCheck );
251253 popupSchemaDockMenu->addAction (ui->actionEnquoteNamesCheck );
@@ -1503,7 +1505,7 @@ void MainWindow::createTreeContextMenu(const QPoint &qPoint)
15031505 return ;
15041506
15051507 QString type = dbSelected->objectType ();
1506- if (type == " table" || type == " view" || type == " trigger" || type == " index" )
1508+ if (type == " table" || type == " view" || type == " trigger" || type == " index" || type == " database " )
15071509 {
15081510 // needed for first click on treeView as for first time change QItemSelectionModel::currentChanged doesn't fire
15091511 changeTreeSelection ();
@@ -1515,14 +1517,18 @@ void MainWindow::createTreeContextMenu(const QPoint &qPoint)
15151517void MainWindow::createSchemaDockContextMenu (const QPoint &qPoint)
15161518{
15171519 bool enable_browse_table = false ;
1520+ bool enable_detach_file = false ;
15181521
15191522 if (dockDbSelected->hasSelection ())
15201523 {
15211524 QString type = dockDbSelected->objectType ();
15221525 if (type == " table" || type == " view" )
15231526 enable_browse_table = true ;
1527+ else if (type == " database" && dockDbSelected->schema () != " main" && dockDbSelected->schema () != " temp" )
1528+ enable_detach_file = true ;
15241529 }
15251530 ui->actionPopupSchemaDockBrowseTable ->setEnabled (enable_browse_table);
1531+ ui->actionPopupSchemaDockDetachDatabase ->setEnabled (enable_detach_file);
15261532
15271533 popupSchemaDockMenu->exec (ui->treeSchemaDock ->mapToGlobal (qPoint));
15281534}
@@ -1533,12 +1539,18 @@ void MainWindow::changeTreeSelection()
15331539 ui->editDeleteObjectAction ->setEnabled (false );
15341540 ui->editModifyObjectAction ->setEnabled (false );
15351541 ui->actionEditBrowseTable ->setEnabled (false );
1542+ ui->actionExportCsvPopup ->setEnabled (false );
1543+ ui->fileDetachAction ->setEnabled (false );
1544+ ui->actionEditCopyCreateStatement ->setEnabled (false );
1545+
1546+ ui->fileDetachAction ->setVisible (false );
15361547
15371548 if (!dbSelected->hasSelection ())
15381549 return ;
15391550
15401551 // Change the text and tooltips of the actions
15411552 QString type = dbSelected->objectType ();
1553+ QString schema = dbSelected->schema ();
15421554
15431555 if (type.isEmpty ())
15441556 {
@@ -1561,15 +1573,24 @@ void MainWindow::changeTreeSelection()
15611573 } else if (type == " table" ) {
15621574 ui->editDeleteObjectAction ->setText (tr (" Delete Table" ));
15631575 ui->editModifyObjectAction ->setText (tr (" Modify Table" ));
1576+ } else if (type == " database" ) {
1577+ ui->editDeleteObjectAction ->setVisible (false );
1578+ ui->editModifyObjectAction ->setVisible (false );
1579+ ui->fileDetachAction ->setVisible (true );
1580+ ui->fileDetachAction ->setEnabled (!(schema == " main" || schema == " temp" ));
1581+ return ;
15641582 } else {
15651583 // Nothing to do for other types. Set the buttons not visible and return.
15661584 ui->editDeleteObjectAction ->setVisible (false );
15671585 ui->editModifyObjectAction ->setVisible (false );
1586+ ui->fileDetachAction ->setVisible (false );
1587+ ui->actionEditCopyCreateStatement ->setEnabled (true );
15681588 return ;
15691589 }
15701590
15711591 ui->editDeleteObjectAction ->setVisible (true );
15721592 ui->editModifyObjectAction ->setVisible (true );
1593+ ui->actionEditCopyCreateStatement ->setEnabled (true );
15731594
15741595 // Activate actions
15751596 ui->editDeleteObjectAction ->setEnabled (!db.readOnly ());
@@ -3165,6 +3186,36 @@ void MainWindow::switchToBrowseDataTab(sqlb::ObjectIdentifier tableToBrowse)
31653186 d->raise ();
31663187}
31673188
3189+ void MainWindow::fileDetachDbTree ()
3190+ {
3191+ fileDetachTreeViewSelected (ui->dbTreeWidget );
3192+ }
3193+
3194+ void MainWindow::fileDetachTreeSchemaDock ()
3195+ {
3196+ fileDetachTreeViewSelected (ui->treeSchemaDock );
3197+ }
3198+
3199+ void MainWindow::fileDetachTreeViewSelected (QTreeView* treeView)
3200+ {
3201+ if (!treeView || !treeView->selectionModel ()->hasSelection ())
3202+ {
3203+ return ;
3204+ }
3205+
3206+ sqlb::ObjectIdentifier attachedDatabase = sqlb::ObjectIdentifier ();
3207+ // get the currently selected attached database from treeView parameter
3208+ // Cancel here if there is no selection
3209+ attachedDatabase.setSchema (treeView->model ()->data (treeView->currentIndex ().sibling (treeView->currentIndex ().row (), DbStructureModel::ColumnSchema), Qt::EditRole).toString ().toStdString ());
3210+ attachedDatabase.setName (treeView->model ()->data (treeView->currentIndex ().sibling (treeView->currentIndex ().row (), DbStructureModel::ColumnName), Qt::EditRole).toString ().toStdString ());
3211+
3212+ QString attached_as = QString::fromStdString (attachedDatabase.name ());
3213+ if (db.detach (attached_as))
3214+ {
3215+ isProjectModified = true ;
3216+ }
3217+ }
3218+
31683219void MainWindow::copyCurrentCreateStatement ()
31693220{
31703221 // Cancel if no field is currently selected
0 commit comments