From 146d9162160543aaf044291ee664b9e8575899e8 Mon Sep 17 00:00:00 2001
From: Freeman Lou <freemanlou2430@Yahoo.com>
Date: Mon, 25 Nov 2013 00:52:15 +0000
Subject: [PATCH] drive popup
---
MainWindow.cpp | 109 ++++++++++++++++++++++++++++++++++++++++++++++-----------
MainWindow.h | 11 +++++-
2 files changed, 99 insertions(+), 21 deletions(-)
diff --git a/MainWindow.cpp b/MainWindow.cpp
index 30b6c8f..421a4aa 100644
a
|
b
|
MainWindow::MainWindow()
|
268 | 268 | menuBar->AddItem(fPartitionMenu); |
269 | 269 | |
270 | 270 | AddChild(menuBar); |
| 271 | |
| 272 | //Popup Menu |
| 273 | fPopUpMenu = new BPopUpMenu("Pop Up Options"); |
| 274 | fPopUpCreate = new BMenuItem(B_TRANSLATE("Create" B_UTF8_ELLIPSIS), |
| 275 | new BMessage(MSG_CREATE), 'C'); |
| 276 | fPopUpChange = new BMenuItem( |
| 277 | B_TRANSLATE("Change parameters" B_UTF8_ELLIPSIS), |
| 278 | new BMessage(MSG_CHANGE)); |
| 279 | fPopUpDelete = new BMenuItem(B_TRANSLATE("Delete"), |
| 280 | new BMessage(MSG_DELETE), 'D'); |
| 281 | fPopUpMount = new BMenuItem(B_TRANSLATE("Mount"), |
| 282 | new BMessage(MSG_MOUNT), 'M'); |
| 283 | fPopUpUnmount = new BMenuItem(B_TRANSLATE("Unmount"), |
| 284 | new BMessage(MSG_UNMOUNT), 'U'); |
| 285 | fPopUpFormat = new BMenu(B_TRANSLATE("Format")); |
| 286 | |
| 287 | fPopUpMenu->AddItem(fPopUpCreate); |
| 288 | fPopUpMenu->AddItem(fPopUpFormat); |
| 289 | fPopUpMenu->AddItem(fPopUpChange); |
| 290 | fPopUpMenu->AddItem(fPopUpDelete); |
| 291 | fPopUpMenu->AddSeparatorItem(); |
| 292 | fPopUpMenu->AddItem(fPopUpMount); |
| 293 | fPopUpMenu->AddItem(fPopUpUnmount); |
| 294 | fPopUpMenu->SetTargetForItems(this); |
271 | 295 | |
272 | 296 | // add DiskView |
273 | 297 | BRect r(Bounds()); |
… |
… |
MainWindow::MessageReceived(BMessage* message)
|
324 | 348 | case MSG_UNMOUNT: |
325 | 349 | _Unmount(fCurrentDisk, fCurrentPartitionID); |
326 | 350 | break; |
327 | | |
| 351 | |
328 | 352 | case MSG_FORMAT: |
329 | 353 | printf("MSG_FORMAT\n"); |
330 | 354 | break; |
331 | | |
| 355 | |
332 | 356 | case MSG_CREATE: |
333 | 357 | _Create(fCurrentDisk, fCurrentPartitionID); |
334 | 358 | break; |
… |
… |
MainWindow::MessageReceived(BMessage* message)
|
340 | 364 | _Initialize(fCurrentDisk, fCurrentPartitionID, diskSystemName); |
341 | 365 | break; |
342 | 366 | } |
343 | | |
| 367 | |
344 | 368 | case MSG_CHANGE: |
345 | 369 | _ChangeParameters(fCurrentDisk, fCurrentPartitionID); |
346 | 370 | break; |
347 | | |
| 371 | |
348 | 372 | case MSG_DELETE: |
349 | 373 | _Delete(fCurrentDisk, fCurrentPartitionID); |
350 | 374 | break; |
… |
… |
MainWindow::MessageReceived(BMessage* message)
|
369 | 393 | _ScanDrives(); |
370 | 394 | break; |
371 | 395 | |
372 | | case MSG_PARTITION_ROW_SELECTED: |
| 396 | case MSG_PARTITION_ROW_SELECTED: { |
373 | 397 | // selection of partitions via list view |
374 | 398 | _AdaptToSelectedPartition(); |
| 399 | |
| 400 | BPoint where; |
| 401 | uint32 buttons; |
| 402 | fListView->GetMouse(&where, &buttons); |
| 403 | if (buttons & B_SECONDARY_MOUSE_BUTTON) |
| 404 | fPopUpMenu->Go(fListView->ConvertToScreen(where),true,false,true); |
375 | 405 | break; |
| 406 | } |
376 | 407 | case MSG_SELECTED_PARTITION_ID: { |
377 | 408 | // selection of partitions via disk view |
378 | 409 | partition_id id; |
… |
… |
MainWindow::MessageReceived(BMessage* message)
|
383 | 414 | _AdaptToSelectedPartition(); |
384 | 415 | } |
385 | 416 | } |
| 417 | BPoint where; |
| 418 | uint32 buttons; |
| 419 | fListView->GetMouse(&where, &buttons); |
| 420 | if (buttons & B_SECONDARY_MOUSE_BUTTON) |
| 421 | fPopUpMenu->Go(fListView->ConvertToScreen(where),true,false,true); |
386 | 422 | break; |
387 | 423 | } |
388 | | |
389 | 424 | default: |
390 | 425 | BWindow::MessageReceived(message); |
391 | 426 | break; |
… |
… |
MainWindow::_UpdateMenus(BDiskDevice* disk,
|
576 | 611 | delete item; |
577 | 612 | while (BMenuItem* item = fDiskInitMenu->RemoveItem((int32)0)) |
578 | 613 | delete item; |
579 | | |
| 614 | while (BMenuItem* item = fPopUpFormat->RemoveItem((int32)0)) |
| 615 | delete item; |
| 616 | |
580 | 617 | fCreateMenuItem->SetEnabled(false); |
581 | 618 | fUnmountMenuItem->SetEnabled(false); |
582 | 619 | fDiskInitMenu->SetEnabled(false); |
583 | 620 | fFormatMenu->SetEnabled(false); |
584 | | |
| 621 | |
| 622 | fPopUpCreate->SetEnabled(false); |
| 623 | fPopUpUnmount->SetEnabled(false); |
| 624 | fPopUpFormat->SetEnabled(false); |
| 625 | |
585 | 626 | if (!disk) { |
586 | 627 | fWipeMenuItem->SetEnabled(false); |
587 | 628 | fEjectMenuItem->SetEnabled(false); |
588 | 629 | fSurfaceTestMenuItem->SetEnabled(false); |
589 | 630 | } else { |
590 | | // fWipeMenuItem->SetEnabled(true); |
| 631 | //fWipeMenuItem->SetEnabled(true); |
591 | 632 | fWipeMenuItem->SetEnabled(false); |
592 | 633 | fEjectMenuItem->SetEnabled(disk->IsRemovableMedia()); |
593 | | // fSurfaceTestMenuItem->SetEnabled(true); |
| 634 | //fSurfaceTestMenuItem->SetEnabled(true); |
594 | 635 | fSurfaceTestMenuItem->SetEnabled(false); |
595 | 636 | |
596 | 637 | // Create menu and items |
… |
… |
MainWindow::_UpdateMenus(BDiskDevice* disk,
|
600 | 641 | parentPartition = disk->FindDescendant(parentID); |
601 | 642 | } |
602 | 643 | |
603 | | if (parentPartition && parentPartition->ContainsPartitioningSystem()) |
| 644 | if (parentPartition && parentPartition->ContainsPartitioningSystem()) { |
604 | 645 | fCreateMenuItem->SetEnabled(true); |
605 | | |
| 646 | fPopUpCreate->SetEnabled(true); |
| 647 | } |
606 | 648 | bool prepared = disk->PrepareModifications() == B_OK; |
| 649 | |
607 | 650 | fFormatMenu->SetEnabled(prepared); |
608 | 651 | fDeleteMenuItem->SetEnabled(prepared); |
609 | 652 | fChangeMenuItem->SetEnabled(prepared); |
610 | | |
| 653 | |
| 654 | fPopUpChange->SetEnabled(prepared); |
| 655 | fPopUpDelete->SetEnabled(prepared); |
| 656 | fPopUpFormat->SetEnabled(prepared); |
| 657 | |
611 | 658 | BPartition* partition = disk->FindDescendant(selectedPartition); |
612 | 659 | |
613 | 660 | BDiskSystem diskSystem; |
… |
… |
MainWindow::_UpdateMenus(BDiskDevice* disk,
|
623 | 670 | BString label = diskSystem.PrettyName(); |
624 | 671 | label << B_UTF8_ELLIPSIS; |
625 | 672 | BMenuItem* item = new BMenuItem(label.String(), message); |
626 | | |
627 | 673 | // TODO: Very unintuitive that we have to use PrettyName (vs Name) |
628 | 674 | item->SetEnabled(partition != NULL |
629 | 675 | && partition->CanInitialize(diskSystem.PrettyName())); |
… |
… |
MainWindow::_UpdateMenus(BDiskDevice* disk,
|
635 | 681 | } else if (diskSystem.IsFileSystem()) { |
636 | 682 | // Otherwise a filesystem |
637 | 683 | fFormatMenu->AddItem(item); |
| 684 | |
| 685 | //For Popup format menu |
| 686 | BMessage* message = new BMessage(MSG_INITIALIZE); |
| 687 | message->AddInt32("parent id", parentID); |
| 688 | message->AddString("disk system", diskSystem.PrettyName()); |
| 689 | BMenuItem* popUpItem = new BMenuItem(label.String(), message); |
| 690 | popUpItem->SetEnabled(partition != NULL |
| 691 | && partition->CanInitialize(diskSystem.PrettyName())); |
| 692 | fPopUpFormat->AddItem(popUpItem); |
| 693 | fPopUpFormat->SetTargetForItems(this); |
638 | 694 | } |
639 | 695 | } |
640 | 696 | |
… |
… |
MainWindow::_UpdateMenus(BDiskDevice* disk,
|
643 | 699 | bool notMountedAndWritable = !partition->IsMounted() |
644 | 700 | && !partition->IsReadOnly() |
645 | 701 | && partition->Device()->HasMedia(); |
646 | | |
| 702 | |
647 | 703 | fFormatMenu->SetEnabled(notMountedAndWritable |
648 | 704 | && fFormatMenu->CountItems() > 0); |
649 | | |
650 | 705 | fDiskInitMenu->SetEnabled(notMountedAndWritable |
651 | 706 | && partition->IsDevice() |
652 | 707 | && fDiskInitMenu->CountItems() > 0); |
653 | | |
654 | 708 | fChangeMenuItem->SetEnabled(notMountedAndWritable); |
655 | | |
656 | 709 | fDeleteMenuItem->SetEnabled(notMountedAndWritable |
657 | 710 | && !partition->IsDevice()); |
658 | | |
659 | 711 | fMountMenuItem->SetEnabled(!partition->IsMounted()); |
660 | | |
| 712 | |
| 713 | fPopUpFormat->SetEnabled(notMountedAndWritable |
| 714 | && fPopUpFormat->CountItems() > 0); |
| 715 | fPopUpChange->SetEnabled(notMountedAndWritable); |
| 716 | fPopUpDelete->SetEnabled(notMountedAndWritable |
| 717 | && !partition->IsDevice()); |
| 718 | fPopUpMount->SetEnabled(notMountedAndWritable); |
| 719 | |
661 | 720 | bool unMountable = false; |
662 | 721 | if (partition->IsMounted()) { |
663 | 722 | // see if this partition is the boot volume |
… |
… |
MainWindow::_UpdateMenus(BDiskDevice* disk,
|
670 | 729 | unMountable = true; |
671 | 730 | } |
672 | 731 | fUnmountMenuItem->SetEnabled(unMountable); |
| 732 | fPopUpUnmount->SetEnabled(unMountable); |
673 | 733 | } else { |
674 | 734 | fDeleteMenuItem->SetEnabled(false); |
675 | 735 | fChangeMenuItem->SetEnabled(false); |
676 | 736 | fMountMenuItem->SetEnabled(false); |
677 | 737 | fFormatMenu->SetEnabled(false); |
678 | 738 | fDiskInitMenu->SetEnabled(false); |
| 739 | |
| 740 | fPopUpDelete->SetEnabled(false); |
| 741 | fPopUpChange->SetEnabled(false); |
| 742 | fPopUpMount->SetEnabled(false); |
| 743 | fPopUpFormat->SetEnabled(false); |
679 | 744 | } |
680 | 745 | |
681 | 746 | if (prepared) |
… |
… |
MainWindow::_UpdateMenus(BDiskDevice* disk,
|
687 | 752 | fDeleteMenuItem->SetEnabled(false); |
688 | 753 | fChangeMenuItem->SetEnabled(false); |
689 | 754 | fMountMenuItem->SetEnabled(false); |
| 755 | |
| 756 | fPopUpDelete->SetEnabled(false); |
| 757 | fPopUpChange->SetEnabled(false); |
| 758 | fPopUpMount->SetEnabled(false); |
690 | 759 | } |
691 | 760 | } |
692 | 761 | |
diff --git a/MainWindow.h b/MainWindow.h
index dbf3f59..3cd214a 100644
a
|
b
|
|
11 | 11 | |
12 | 12 | |
13 | 13 | #include <DiskDeviceRoster.h> |
| 14 | #include <PopUpMenu.h> |
14 | 15 | #include <Window.h> |
15 | 16 | |
16 | 17 | #include "Support.h" |
… |
… |
class PartitionListView;
|
25 | 26 | |
26 | 27 | |
27 | 28 | enum { |
28 | | MSG_SELECTED_PARTITION_ID = 'spid' |
| 29 | MSG_SELECTED_PARTITION_ID = 'spid', |
29 | 30 | }; |
30 | 31 | |
31 | 32 | |
… |
… |
private:
|
101 | 102 | BMenuItem* fMountMenuItem; |
102 | 103 | BMenuItem* fUnmountMenuItem; |
103 | 104 | BMenuItem* fMountAllMenuItem; |
| 105 | |
| 106 | BMenu* fPopUpFormat; |
| 107 | BMenuItem* fPopUpCreate; |
| 108 | BMenuItem* fPopUpChange; |
| 109 | BMenuItem* fPopUpDelete; |
| 110 | BMenuItem* fPopUpMount; |
| 111 | BMenuItem* fPopUpUnmount; |
| 112 | BPopUpMenu* fPopUpMenu; |
104 | 113 | }; |
105 | 114 | |
106 | 115 | |