- Timestamp:
- Dec 6, 2010 11:56:28 AM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 68545
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
r34523 r34740 3937 3937 3938 3938 if (remind) 3939 { 3940 class RemindEvent : public VBoxAsyncEvent 3941 { 3942 ulong mRealBPP; 3943 public: 3944 RemindEvent (ulong aRealBPP) 3945 : VBoxAsyncEvent(0), mRealBPP (aRealBPP) {} 3946 void handle() 3947 { 3948 vboxProblem().remindAboutWrongColorDepth (mRealBPP, 32); 3949 } 3950 }; 3951 (new RemindEvent (size.bitsPerPixel()))->post(); 3952 } 3939 vboxProblem().remindAboutWrongColorDepth(size.bitsPerPixel(), 32); 3953 3940 } 3954 3941 -
trunk/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h
r33540 r34740 840 840 ///////////////////////////////////////////////////////////////////////////// 841 841 842 /* include the generated header containing concrete wrapper definitions*/842 /* Include the generated header containing wrapper definitions: */ 843 843 #include "COMWrappers.h" 844 844 845 /* Declare metatypes for particular wrappers: */ 846 Q_DECLARE_METATYPE(CProgress); 847 Q_DECLARE_METATYPE(CHost); 848 Q_DECLARE_METATYPE(CMachine); 849 Q_DECLARE_METATYPE(CConsole); 850 Q_DECLARE_METATYPE(CHostNetworkInterface); 851 845 852 /** @} */ 846 853 -
trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxDefs.h
r34519 r34740 72 72 enum 73 73 { 74 AsyncEventType = QEvent::User + 100 75 , ResizeEventType 74 ResizeEventType = QEvent::User + 101 76 75 , RepaintEventType 77 76 , SetRegionEventType … … 171 170 }; 172 171 172 Q_DECLARE_METATYPE(VBoxDefs::MediumType); 173 173 174 #define MAC_LEOPARD_STYLE defined(Q_WS_MAC) && (QT_VERSION >= 0x040300) 174 175 -
trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
r34681 r34740 4537 4537 switch (e->type()) 4538 4538 { 4539 case VBoxDefs::AsyncEventType:4540 {4541 VBoxAsyncEvent *ev = (VBoxAsyncEvent *) e;4542 ev->handle();4543 return true;4544 }4545 4546 4539 case VBoxDefs::MediaEnumEventType: 4547 4540 { … … 5280 5273 */ 5281 5274 5282 VBoxAsyncEvent::VBoxAsyncEvent(uint uDelay)5283 : QEvent((QEvent::Type)VBoxDefs::AsyncEventType)5284 , m_uDelay(uDelay)5285 {5286 }5287 5288 void VBoxAsyncEvent::post()5289 {5290 UIAsyncEventPoster::post(this);5291 }5292 5293 uint VBoxAsyncEvent::delay() const5294 {5295 return m_uDelay;5296 }5297 5298 UIAsyncEventPoster* UIAsyncEventPoster::m_spInstance = 0;5299 5300 void UIAsyncEventPoster::post(VBoxAsyncEvent *pAsyncEvent)5301 {5302 if (!m_spInstance)5303 new UIAsyncEventPoster(pAsyncEvent);5304 }5305 5306 UIAsyncEventPoster::UIAsyncEventPoster(VBoxAsyncEvent *pAsyncEvent)5307 : m_pAsyncEvent(pAsyncEvent)5308 {5309 m_spInstance = this;5310 QTimer::singleShot(m_pAsyncEvent->delay(), this, SLOT(sltPostAsyncEvent()));5311 }5312 5313 UIAsyncEventPoster::~UIAsyncEventPoster()5314 {5315 m_spInstance = 0;5316 }5317 5318 void UIAsyncEventPoster::sltPostAsyncEvent()5319 {5320 if (m_pAsyncEvent)5321 QApplication::postEvent(&vboxGlobal(), m_pAsyncEvent);5322 m_pAsyncEvent = 0;5323 deleteLater();5324 }5325 5326 5275 /** 5327 5276 * USB Popup Menu class methods -
trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
r34567 r34740 863 863 //////////////////////////////////////////////////////////////////////////////// 864 864 865 /* Generic asynchronous event.866 * This abstract class is intended to provide a convenient way867 * to execute code on the main GUI thread asynchronously to the calling party.868 * This is done by putting necessary actions to the handle() function869 * in a subclass and then posting an instance of the subclass using post().870 * The instance must be allocated on the heap and will be automatically deleted after processing. */871 class VBoxAsyncEvent : public QEvent872 {873 public:874 875 /* VBoxAsyncEvent constructor: */876 VBoxAsyncEvent(uint uDelay = 0);877 878 /* Worker function. Gets executed on the GUI thread when879 * the posted event is processed by the main event loop. */880 virtual void handle() = 0;881 882 /* Posts this event to the main event loop. The caller loses ownership of883 * this object after this method returns and must not delete the object. */884 void post();885 886 /* Returns delay for this event: */887 uint delay() const;888 889 private:890 891 uint m_uDelay;892 };893 894 /* Asynchronous event poster.895 * This class is used to post async event into VBoxGlobal event handler896 * taking into account delay set during async event creation procedure. */897 class UIAsyncEventPoster : public QObject898 {899 Q_OBJECT;900 901 public:902 903 /* Async event poster creator: */904 static void post(VBoxAsyncEvent *pAsyncEvent);905 906 protected:907 908 /* Constructor/destructor: */909 UIAsyncEventPoster(VBoxAsyncEvent *pAsyncEvent);910 ~UIAsyncEventPoster();911 912 private slots:913 914 /* Async event poster: */915 void sltPostAsyncEvent();916 917 private:918 919 static UIAsyncEventPoster *m_spInstance;920 VBoxAsyncEvent *m_pAsyncEvent;921 };922 923 865 /** 924 866 * USB Popup Menu class. -
trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp
r34736 r34740 1258 1258 } 1259 1259 1260 void VBoxProblemReporter::cannotAttachDevice(QWidget *pParent, const CMachine &machine,1261 VBoxDefs::MediumType type, const QString &strLocation, const StorageSlot &storageSlot)1262 {1263 QString strMessage;1264 switch (type)1265 {1266 case VBoxDefs::MediumType_HardDisk:1267 {1268 strMessage = tr("Failed to attach the hard disk (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.")1269 .arg(strLocation).arg(vboxGlobal().toString(storageSlot)).arg(CMachine(machine).GetName());1270 break;1271 }1272 case VBoxDefs::MediumType_DVD:1273 {1274 strMessage = tr("Failed to attach the CD/DVD device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.")1275 .arg(strLocation).arg(vboxGlobal().toString(storageSlot)).arg(CMachine(machine).GetName());1276 break;1277 }1278 case VBoxDefs::MediumType_Floppy:1279 {1280 strMessage = tr("Failed to attach the floppy device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.")1281 .arg(strLocation).arg(vboxGlobal().toString(storageSlot)).arg(CMachine(machine).GetName());1282 break;1283 }1284 default:1285 break;1286 }1287 message(pParent ? pParent : mainWindowShown(), Error, strMessage, formatErrorInfo(machine));1288 }1289 1290 1260 void VBoxProblemReporter::cannotDetachDevice(QWidget *pParent, const CMachine &machine, 1291 1261 VBoxDefs::MediumType type, const QString &strLocation, const StorageSlot &storageSlot) … … 1437 1407 } 1438 1408 1439 void VBoxProblemReporter::cannotCreateHostInterface (1440 const CHost &host, QWidget *parent)1441 {1442 message (parent ? parent : mainWindowShown(), Error,1443 tr ("Failed to create the host-only network interface."),1444 formatErrorInfo (host));1445 }1446 1447 void VBoxProblemReporter::cannotCreateHostInterface (1448 const CProgress &progress, QWidget *parent)1449 {1450 message (parent ? parent : mainWindowShown(), Error,1451 tr ("Failed to create the host-only network interface."),1452 formatErrorInfo (progress.GetErrorInfo()));1453 }1454 1455 void VBoxProblemReporter::cannotRemoveHostInterface (1456 const CHost &host, const CHostNetworkInterface &iface, QWidget *parent)1457 {1458 message (parent ? parent : mainWindowShown(), Error,1459 tr ("Failed to remove the host network interface <b>%1</b>.")1460 .arg (iface.GetName()),1461 formatErrorInfo (host));1462 }1463 1464 void VBoxProblemReporter::cannotRemoveHostInterface (1465 const CProgress &progress, const CHostNetworkInterface &iface, QWidget *parent)1466 {1467 message (parent ? parent : mainWindowShown(), Error,1468 tr ("Failed to remove the host network interface <b>%1</b>.")1469 .arg (iface.GetName()),1470 formatErrorInfo (progress.GetErrorInfo()));1471 }1472 1473 1409 void VBoxProblemReporter::cannotAttachUSBDevice (const CConsole &console, 1474 1410 const QString &device) … … 1521 1457 .arg (console.GetMachine().GetName()), 1522 1458 formatErrorInfo (error)); 1523 }1524 1525 void VBoxProblemReporter::cannotCreateSharedFolder (QWidget *aParent,1526 const CMachine &aMachine,1527 const QString &aName,1528 const QString &aPath)1529 {1530 /* preserve the current error info before calling the object again */1531 COMResult res (aMachine);1532 1533 message (aParent, Error,1534 tr ("Failed to create the shared folder <b>%1</b> "1535 "(pointing to <nobr><b>%2</b></nobr>) "1536 "for the virtual machine <b>%3</b>.")1537 .arg (aName)1538 .arg (aPath)1539 .arg (aMachine.GetName()),1540 formatErrorInfo (res));1541 }1542 1543 void VBoxProblemReporter::cannotRemoveSharedFolder (QWidget *aParent,1544 const CMachine &aMachine,1545 const QString &aName,1546 const QString &aPath)1547 {1548 /* preserve the current error info before calling the object again */1549 COMResult res (aMachine);1550 1551 message (aParent, Error,1552 tr ("Failed to remove the shared folder <b>%1</b> "1553 "(pointing to <nobr><b>%2</b></nobr>) "1554 "from the virtual machine <b>%3</b>.")1555 .arg (aName)1556 .arg (aPath)1557 .arg (aMachine.GetName()),1558 formatErrorInfo (res));1559 }1560 1561 void VBoxProblemReporter::cannotCreateSharedFolder (QWidget *aParent,1562 const CConsole &aConsole,1563 const QString &aName,1564 const QString &aPath)1565 {1566 /* preserve the current error info before calling the object again */1567 COMResult res (aConsole);1568 1569 message (aParent, Error,1570 tr ("Failed to create the shared folder <b>%1</b> "1571 "(pointing to <nobr><b>%2</b></nobr>) "1572 "for the virtual machine <b>%3</b>.")1573 .arg (aName)1574 .arg (aPath)1575 .arg (aConsole.GetMachine().GetName()),1576 formatErrorInfo (res));1577 }1578 1579 void VBoxProblemReporter::cannotRemoveSharedFolder (QWidget *aParent,1580 const CConsole &aConsole,1581 const QString &aName,1582 const QString &aPath)1583 {1584 /* preserve the current error info before calling the object again */1585 COMResult res (aConsole);1586 1587 message (aParent, Error,1588 tr ("<p>Failed to remove the shared folder <b>%1</b> "1589 "(pointing to <nobr><b>%2</b></nobr>) "1590 "from the virtual machine <b>%3</b>.</p>"1591 "<p>Please close all programs in the guest OS that "1592 "may be using this shared folder and try again.</p>")1593 .arg (aName)1594 .arg (aPath)1595 .arg (aConsole.GetMachine().GetName()),1596 formatErrorInfo (res));1597 1459 } 1598 1460 … … 2045 1907 } 2046 1908 2047 void VBoxProblemReporter::remindAboutWrongColorDepth (ulong aRealBPP,2048 ulong aWantedBPP)2049 {2050 const char *kName = "remindAboutWrongColorDepth";2051 2052 /* Close the previous (outdated) window if any. We use kName as2053 * aAutoConfirmId which is also used as the widget name by default. */2054 {2055 QWidget *outdated = VBoxGlobal::findWidget (NULL, kName, "QIMessageBox");2056 if (outdated)2057 outdated->close();2058 }2059 2060 int rc = message (mainMachineWindowShown(), Info,2061 tr ("<p>The virtual machine window is optimized to work in "2062 "<b>%1 bit</b> color mode but the "2063 "virtual display is currently set to <b>%2 bit</b>.</p>"2064 "<p>Please open the display properties dialog of the guest OS and "2065 "select a <b>%3 bit</b> color mode, if it is available, for "2066 "best possible performance of the virtual video subsystem.</p>"2067 "<p><b>Note</b>. Some operating systems, like OS/2, may actually "2068 "work in 32 bit mode but report it as 24 bit "2069 "(16 million colors). You may try to select a different color "2070 "mode to see if this message disappears or you can simply "2071 "disable the message now if you are sure the required color "2072 "mode (%4 bit) is not available in the guest OS.</p>")2073 .arg (aWantedBPP).arg (aRealBPP).arg (aWantedBPP).arg (aWantedBPP),2074 kName);2075 NOREF(rc);2076 }2077 2078 1909 /** 2079 1910 * Returns @c true if the user has selected to power off the machine. … … 2495 2326 } 2496 2327 2328 void VBoxProblemReporter::cannotCreateHostInterface(const CHost &host, QWidget *pParent /* = 0 */) 2329 { 2330 if (thread() == QThread::currentThread()) 2331 sltCannotCreateHostInterface(host, pParent); 2332 else 2333 emit sigCannotCreateHostInterface(host, pParent); 2334 } 2335 2336 void VBoxProblemReporter::cannotCreateHostInterface(const CProgress &progress, QWidget *pParent /* = 0 */) 2337 { 2338 if (thread() == QThread::currentThread()) 2339 sltCannotCreateHostInterface(progress, pParent); 2340 else 2341 emit sigCannotCreateHostInterface(progress, pParent); 2342 } 2343 2344 void VBoxProblemReporter::cannotRemoveHostInterface(const CHost &host, const CHostNetworkInterface &iface, 2345 QWidget *pParent /* = 0 */) 2346 { 2347 if (thread() == QThread::currentThread()) 2348 sltCannotRemoveHostInterface(host, iface ,pParent); 2349 else 2350 emit sigCannotRemoveHostInterface(host, iface, pParent); 2351 } 2352 2353 void VBoxProblemReporter::cannotRemoveHostInterface(const CProgress &progress, const CHostNetworkInterface &iface, 2354 QWidget *pParent /* = 0 */) 2355 { 2356 if (thread() == QThread::currentThread()) 2357 sltCannotRemoveHostInterface(progress, iface, pParent); 2358 else 2359 emit sigCannotRemoveHostInterface(progress, iface, pParent); 2360 } 2361 2362 void VBoxProblemReporter::cannotAttachDevice(const CMachine &machine, VBoxDefs::MediumType type, 2363 const QString &strLocation, const StorageSlot &storageSlot, 2364 QWidget *pParent /* = 0 */) 2365 { 2366 if (thread() == QThread::currentThread()) 2367 sltCannotAttachDevice(machine, type, strLocation, storageSlot, pParent); 2368 else 2369 emit sigCannotAttachDevice(machine, type, strLocation, storageSlot, pParent); 2370 } 2371 2372 void VBoxProblemReporter::cannotCreateSharedFolder(const CMachine &machine, const QString &strName, 2373 const QString &strPath, QWidget *pParent /* = 0 */) 2374 { 2375 if (thread() == QThread::currentThread()) 2376 sltCannotCreateSharedFolder(machine, strName, strPath, pParent); 2377 else 2378 emit sigCannotCreateSharedFolder(machine, strName, strPath, pParent); 2379 } 2380 2381 void VBoxProblemReporter::cannotRemoveSharedFolder(const CMachine &machine, const QString &strName, 2382 const QString &strPath, QWidget *pParent /* = 0 */) 2383 { 2384 if (thread() == QThread::currentThread()) 2385 sltCannotRemoveSharedFolder(machine, strName, strPath, pParent); 2386 else 2387 emit sigCannotRemoveSharedFolder(machine, strName, strPath, pParent); 2388 } 2389 2390 void VBoxProblemReporter::cannotCreateSharedFolder(const CConsole &console, const QString &strName, 2391 const QString &strPath, QWidget *pParent /* = 0 */) 2392 { 2393 if (thread() == QThread::currentThread()) 2394 sltCannotCreateSharedFolder(console, strName, strPath, pParent); 2395 else 2396 emit sigCannotCreateSharedFolder(console, strName, strPath, pParent); 2397 } 2398 2399 void VBoxProblemReporter::cannotRemoveSharedFolder(const CConsole &console, const QString &strName, 2400 const QString &strPath, QWidget *pParent /* = 0 */) 2401 { 2402 if (thread() == QThread::currentThread()) 2403 sltCannotRemoveSharedFolder(console, strName, strPath, pParent); 2404 else 2405 emit sigCannotRemoveSharedFolder(console, strName, strPath, pParent); 2406 } 2407 2408 void VBoxProblemReporter::remindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP) 2409 { 2410 emit sigRemindAboutWrongColorDepth(uRealBPP, uWantedBPP); 2411 } 2412 2497 2413 void VBoxProblemReporter::showHelpWebDialog() 2498 2414 { … … 2584 2500 } 2585 2501 2502 void VBoxProblemReporter::sltCannotCreateHostInterface(const CHost &host, QWidget *pParent) 2503 { 2504 message(pParent ? pParent : mainWindowShown(), Error, 2505 tr("Failed to create the host-only network interface."), 2506 formatErrorInfo(host)); 2507 } 2508 2509 void VBoxProblemReporter::sltCannotCreateHostInterface(const CProgress &progress, QWidget *pParent) 2510 { 2511 message(pParent ? pParent : mainWindowShown(), Error, 2512 tr("Failed to create the host-only network interface."), 2513 formatErrorInfo(progress.GetErrorInfo())); 2514 } 2515 2516 void VBoxProblemReporter::sltCannotRemoveHostInterface(const CHost &host, const CHostNetworkInterface &iface, QWidget *pParent) 2517 { 2518 message(pParent ? pParent : mainWindowShown(), Error, 2519 tr("Failed to remove the host network interface <b>%1</b>.") 2520 .arg(iface.GetName()), 2521 formatErrorInfo(host)); 2522 } 2523 2524 void VBoxProblemReporter::sltCannotRemoveHostInterface(const CProgress &progress, const CHostNetworkInterface &iface, QWidget *pParent) 2525 { 2526 message(pParent ? pParent : mainWindowShown(), Error, 2527 tr("Failed to remove the host network interface <b>%1</b>.") 2528 .arg(iface.GetName()), 2529 formatErrorInfo(progress.GetErrorInfo())); 2530 } 2531 2532 void VBoxProblemReporter::sltCannotAttachDevice(const CMachine &machine, VBoxDefs::MediumType type, 2533 const QString &strLocation, const StorageSlot &storageSlot, 2534 QWidget *pParent) 2535 { 2536 QString strMessage; 2537 switch (type) 2538 { 2539 case VBoxDefs::MediumType_HardDisk: 2540 { 2541 strMessage = tr("Failed to attach the hard disk (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.") 2542 .arg(strLocation).arg(vboxGlobal().toString(storageSlot)).arg(CMachine(machine).GetName()); 2543 break; 2544 } 2545 case VBoxDefs::MediumType_DVD: 2546 { 2547 strMessage = tr("Failed to attach the CD/DVD device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.") 2548 .arg(strLocation).arg(vboxGlobal().toString(storageSlot)).arg(CMachine(machine).GetName()); 2549 break; 2550 } 2551 case VBoxDefs::MediumType_Floppy: 2552 { 2553 strMessage = tr("Failed to attach the floppy device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.") 2554 .arg(strLocation).arg(vboxGlobal().toString(storageSlot)).arg(CMachine(machine).GetName()); 2555 break; 2556 } 2557 default: 2558 break; 2559 } 2560 message(pParent ? pParent : mainWindowShown(), Error, strMessage, formatErrorInfo(machine)); 2561 } 2562 2563 void VBoxProblemReporter::sltCannotCreateSharedFolder(const CMachine &machine, const QString &strName, 2564 const QString &strPath, QWidget *pParent) 2565 { 2566 message(pParent ? pParent : mainMachineWindowShown(), Error, 2567 tr("Failed to create the shared folder <b>%1</b> " 2568 "(pointing to <nobr><b>%2</b></nobr>) " 2569 "for the virtual machine <b>%3</b>.") 2570 .arg(strName) 2571 .arg(strPath) 2572 .arg(CMachine(machine).GetName()), 2573 formatErrorInfo(machine)); 2574 } 2575 2576 void VBoxProblemReporter::sltCannotRemoveSharedFolder(const CMachine &machine, const QString &strName, 2577 const QString &strPath, QWidget *pParent) 2578 { 2579 message(pParent ? pParent : mainMachineWindowShown(), Error, 2580 tr("Failed to remove the shared folder <b>%1</b> " 2581 "(pointing to <nobr><b>%2</b></nobr>) " 2582 "from the virtual machine <b>%3</b>.") 2583 .arg(strName) 2584 .arg(strPath) 2585 .arg(CMachine(machine).GetName()), 2586 formatErrorInfo(machine)); 2587 } 2588 2589 void VBoxProblemReporter::sltCannotCreateSharedFolder(const CConsole &console, const QString &strName, 2590 const QString &strPath, QWidget *pParent) 2591 { 2592 message(pParent ? pParent : mainMachineWindowShown(), Error, 2593 tr("Failed to create the shared folder <b>%1</b> " 2594 "(pointing to <nobr><b>%2</b></nobr>) " 2595 "for the virtual machine <b>%3</b>.") 2596 .arg(strName) 2597 .arg(strPath) 2598 .arg(CConsole(console).GetMachine().GetName()), 2599 formatErrorInfo(console)); 2600 } 2601 2602 void VBoxProblemReporter::sltCannotRemoveSharedFolder(const CConsole &console, const QString &strName, 2603 const QString &strPath, QWidget *pParent) 2604 { 2605 message(pParent ? pParent : mainMachineWindowShown(), Error, 2606 tr("<p>Failed to remove the shared folder <b>%1</b> " 2607 "(pointing to <nobr><b>%2</b></nobr>) " 2608 "from the virtual machine <b>%3</b>.</p>" 2609 "<p>Please close all programs in the guest OS that " 2610 "may be using this shared folder and try again.</p>") 2611 .arg(strName) 2612 .arg(strPath) 2613 .arg(CConsole(console).GetMachine().GetName()), 2614 formatErrorInfo(console)); 2615 } 2616 2617 void VBoxProblemReporter::sltRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP) 2618 { 2619 const char *kName = "remindAboutWrongColorDepth"; 2620 2621 /* Close the previous (outdated) window if any. We use kName as 2622 * aAutoConfirmId which is also used as the widget name by default. */ 2623 { 2624 QWidget *outdated = VBoxGlobal::findWidget(NULL, kName, "QIMessageBox"); 2625 if (outdated) 2626 outdated->close(); 2627 } 2628 2629 message(mainMachineWindowShown(), Info, 2630 tr("<p>The virtual machine window is optimized to work in " 2631 "<b>%1 bit</b> color mode but the " 2632 "virtual display is currently set to <b>%2 bit</b>.</p>" 2633 "<p>Please open the display properties dialog of the guest OS and " 2634 "select a <b>%3 bit</b> color mode, if it is available, for " 2635 "best possible performance of the virtual video subsystem.</p>" 2636 "<p><b>Note</b>. Some operating systems, like OS/2, may actually " 2637 "work in 32 bit mode but report it as 24 bit " 2638 "(16 million colors). You may try to select a different color " 2639 "mode to see if this message disappears or you can simply " 2640 "disable the message now if you are sure the required color " 2641 "mode (%4 bit) is not available in the guest OS.</p>") 2642 .arg(uWantedBPP).arg(uRealBPP).arg(uWantedBPP).arg(uWantedBPP), 2643 kName); 2644 } 2645 2646 VBoxProblemReporter::VBoxProblemReporter() 2647 { 2648 /* Register required objects as meta-types: */ 2649 qRegisterMetaType<CProgress>(); 2650 qRegisterMetaType<CHost>(); 2651 qRegisterMetaType<CMachine>(); 2652 qRegisterMetaType<CConsole>(); 2653 qRegisterMetaType<CHostNetworkInterface>(); 2654 qRegisterMetaType<VBoxDefs::MediumType>(); 2655 qRegisterMetaType<StorageSlot>(); 2656 2657 /* Prepare required connections: */ 2658 connect(this, SIGNAL(sigCannotCreateHostInterface(const CHost&, QWidget*)), 2659 this, SLOT(sltCannotCreateHostInterface(const CHost&, QWidget*)), 2660 Qt::BlockingQueuedConnection); 2661 connect(this, SIGNAL(sigCannotCreateHostInterface(const CProgress&, QWidget*)), 2662 this, SLOT(sltCannotCreateHostInterface(const CProgress&, QWidget*)), 2663 Qt::BlockingQueuedConnection); 2664 connect(this, SIGNAL(sigCannotRemoveHostInterface(const CHost&, const CHostNetworkInterface&, QWidget*)), 2665 this, SLOT(sltCannotRemoveHostInterface(const CHost&, const CHostNetworkInterface&, QWidget*)), 2666 Qt::BlockingQueuedConnection); 2667 connect(this, SIGNAL(sigCannotRemoveHostInterface(const CProgress&, const CHostNetworkInterface&, QWidget*)), 2668 this, SLOT(sltCannotRemoveHostInterface(const CProgress&, const CHostNetworkInterface&, QWidget*)), 2669 Qt::BlockingQueuedConnection); 2670 connect(this, SIGNAL(sigCannotAttachDevice(const CMachine&, VBoxDefs::MediumType, const QString&, const StorageSlot&, QWidget*)), 2671 this, SLOT(sltCannotAttachDevice(const CMachine&, VBoxDefs::MediumType, const QString&, const StorageSlot&, QWidget*)), 2672 Qt::BlockingQueuedConnection); 2673 connect(this, SIGNAL(sigCannotCreateSharedFolder(const CMachine&, const QString&, const QString&, QWidget*)), 2674 this, SLOT(sltCannotCreateSharedFolder(const CMachine&, const QString&, const QString&, QWidget*)), 2675 Qt::BlockingQueuedConnection); 2676 connect(this, SIGNAL(sigCannotRemoveSharedFolder(const CMachine&, const QString&, const QString&, QWidget*)), 2677 this, SLOT(sltCannotRemoveSharedFolder(const CMachine&, const QString&, const QString&, QWidget*)), 2678 Qt::BlockingQueuedConnection); 2679 connect(this, SIGNAL(sigCannotCreateSharedFolder(const CConsole&, const QString&, const QString&, QWidget*)), 2680 this, SLOT(sltCannotCreateSharedFolder(const CConsole&, const QString&, const QString&, QWidget*)), 2681 Qt::BlockingQueuedConnection); 2682 connect(this, SIGNAL(sigCannotRemoveSharedFolder(const CConsole&, const QString&, const QString&, QWidget*)), 2683 this, SLOT(sltCannotRemoveSharedFolder(const CConsole&, const QString&, const QString&, QWidget*)), 2684 Qt::BlockingQueuedConnection); 2685 connect(this, SIGNAL(sigRemindAboutWrongColorDepth(ulong, ulong)), 2686 this, SLOT(sltRemindAboutWrongColorDepth(ulong, ulong)), Qt::QueuedConnection); 2687 } 2688 2586 2689 /* Returns a reference to the global VirtualBox problem reporter instance: */ 2587 2690 VBoxProblemReporter &VBoxProblemReporter::instance() -
trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h
r34736 r34740 254 254 const CMedium &aHD, 255 255 const CProgress &aProgress); 256 void cannotAttachDevice(QWidget *pParent, const CMachine &machine,257 VBoxDefs::MediumType type, const QString &strLocation, const StorageSlot &storageSlot);258 256 void cannotDetachDevice(QWidget *pParent, const CMachine &machine, 259 257 VBoxDefs::MediumType type, const QString &strLocation, const StorageSlot &storageSlot); … … 272 270 273 271 int confirmDeletingHostInterface (const QString &aName, QWidget *aParent = 0); 274 void cannotCreateHostInterface (const CHost &aHost, QWidget *aParent = 0);275 void cannotCreateHostInterface (const CProgress &aProgress, QWidget *aParent = 0);276 void cannotRemoveHostInterface (const CHost &aHost,277 const CHostNetworkInterface &aIface,278 QWidget *aParent = 0);279 void cannotRemoveHostInterface (const CProgress &aProgress,280 const CHostNetworkInterface &aIface,281 QWidget *aParent = 0);282 272 283 273 void cannotAttachUSBDevice (const CConsole &console, const QString &device); … … 288 278 const CVirtualBoxErrorInfo &error); 289 279 290 void cannotCreateSharedFolder (QWidget *, const CMachine &,291 const QString &, const QString &);292 void cannotRemoveSharedFolder (QWidget *, const CMachine &,293 const QString &, const QString &);294 void cannotCreateSharedFolder (QWidget *, const CConsole &,295 const QString &, const QString &);296 void cannotRemoveSharedFolder (QWidget *, const CConsole &,297 const QString &, const QString &);298 299 280 void remindAboutGuestAdditionsAreNotActive(QWidget *pParent); 300 281 int cannotFindGuestAdditions (const QString &aSrc1, const QString &aSrc2); … … 335 316 bool confirmGoingSeamless (const QString &aHotKey); 336 317 337 void remindAboutWrongColorDepth (ulong aRealBPP, ulong aWantedBPP);338 339 318 bool remindAboutGuruMeditation (const CConsole &aConsole, 340 319 const QString &aLogFolder); … … 394 373 } 395 374 375 /* Stuff supporting interthreading: */ 376 void cannotCreateHostInterface(const CHost &host, QWidget *pParent = 0); 377 void cannotCreateHostInterface(const CProgress &progress, QWidget *pParent = 0); 378 void cannotRemoveHostInterface(const CHost &host, const CHostNetworkInterface &iface, QWidget *pParent = 0); 379 void cannotRemoveHostInterface(const CProgress &progress, const CHostNetworkInterface &iface, QWidget *pParent = 0); 380 void cannotAttachDevice(const CMachine &machine, VBoxDefs::MediumType type, 381 const QString &strLocation, const StorageSlot &storageSlot, QWidget *pParent = 0); 382 void cannotCreateSharedFolder(const CMachine &machine, const QString &strName, 383 const QString &strPath, QWidget *pParent = 0); 384 void cannotRemoveSharedFolder(const CMachine &machine, const QString &strName, 385 const QString &strPath, QWidget *pParent = 0); 386 void cannotCreateSharedFolder(const CConsole &console, const QString &strName, 387 const QString &strPath, QWidget *pParent = 0); 388 void cannotRemoveSharedFolder(const CConsole &console, const QString &strName, 389 const QString &strPath, QWidget *pParent = 0); 390 void remindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP); 391 396 392 signals: 397 393 398 394 void sigDownloaderUserManualCreated(); 399 395 void sigToCloseAllWarnings(); 396 397 /* Stuff supporting interthreading: */ 398 void sigCannotCreateHostInterface(const CHost &host, QWidget *pParent); 399 void sigCannotCreateHostInterface(const CProgress &progress, QWidget *pParent); 400 void sigCannotRemoveHostInterface(const CHost &host, const CHostNetworkInterface &iface, QWidget *pParent); 401 void sigCannotRemoveHostInterface(const CProgress &progress, const CHostNetworkInterface &iface, QWidget *pParent); 402 void sigCannotAttachDevice(const CMachine &machine, VBoxDefs::MediumType type, 403 const QString &strLocation, const StorageSlot &storageSlot, QWidget *pParent); 404 void sigCannotCreateSharedFolder(const CMachine &machine, const QString &strName, 405 const QString &strPath, QWidget *pParent); 406 void sigCannotRemoveSharedFolder(const CMachine &machine, const QString &strName, 407 const QString &strPath, QWidget *pParent); 408 void sigCannotCreateSharedFolder(const CConsole &console, const QString &strName, 409 const QString &strPath, QWidget *pParent); 410 void sigCannotRemoveSharedFolder(const CConsole &console, const QString &strName, 411 const QString &strPath, QWidget *pParent); 412 void sigRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP); 400 413 401 414 public slots: … … 407 420 void sltShowUserManual(const QString &strLocation); 408 421 422 private slots: 423 424 /* Stuff supporting interthreading: */ 425 void sltCannotCreateHostInterface(const CHost &host, QWidget *pParent); 426 void sltCannotCreateHostInterface(const CProgress &progress, QWidget *pParent); 427 void sltCannotRemoveHostInterface(const CHost &host, const CHostNetworkInterface &iface, QWidget *pParent); 428 void sltCannotRemoveHostInterface(const CProgress &progress, const CHostNetworkInterface &iface, QWidget *pParent); 429 void sltCannotAttachDevice(const CMachine &machine, VBoxDefs::MediumType type, 430 const QString &strLocation, const StorageSlot &storageSlot, QWidget *pParent); 431 void sltCannotCreateSharedFolder(const CMachine &machine, const QString &strName, 432 const QString &strPath, QWidget *pParent); 433 void sltCannotRemoveSharedFolder(const CMachine &machine, const QString &strName, 434 const QString &strPath, QWidget *pParent); 435 void sltCannotCreateSharedFolder(const CConsole &console, const QString &strName, 436 const QString &strPath, QWidget *pParent); 437 void sltCannotRemoveSharedFolder(const CConsole &console, const QString &strName, 438 const QString &strPath, QWidget *pParent); 439 void sltRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP); 440 409 441 private: 442 443 VBoxProblemReporter(); 410 444 411 445 static VBoxProblemReporter &instance(); -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp
r32981 r34740 186 186 187 187 if (bRemind) 188 { 189 class RemindEvent : public VBoxAsyncEvent 190 { 191 ulong mRealBPP; 192 public: 193 RemindEvent (ulong aRealBPP) 194 : VBoxAsyncEvent(0), mRealBPP (aRealBPP) {} 195 void handle() 196 { 197 vboxProblem().remindAboutWrongColorDepth (mRealBPP, 32); 198 } 199 }; 200 (new RemindEvent (pEvent->bitsPerPixel()))->post(); 201 } 188 vboxProblem().remindAboutWrongColorDepth(pEvent->bitsPerPixel(), 32); 202 189 } 203 190 -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQuartz2D.cpp
r31318 r34740 413 413 414 414 // if (remind) 415 // { 416 // class RemindEvent : public VBoxAsyncEvent 417 // { 418 // ulong mRealBPP; 419 // public: 420 // RemindEvent (ulong aRealBPP) 421 // : mRealBPP (aRealBPP) {} 422 // void handle() 423 // { 424 // vboxProblem().remindAboutWrongColorDepth (mRealBPP, 32); 425 // } 426 // }; 427 // (new RemindEvent (aEvent->bitsPerPixel()))->post(); 428 // } 415 // vboxProblem().remindAboutWrongColorDepth(aEvent->bitsPerPixel(), 32); 429 416 } 430 417 -
trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
r34735 r34740 262 262 if (!m_fConditionDone) 263 263 m_condition.wakeAll(); 264 if (pPage->failed()) 265 break; 264 266 } 265 267 /* Notify listeners about all pages were processed: */ -
trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.cpp
r34234 r34740 71 71 } 72 72 73 /* Page 'failed' stuff: */ 74 bool UISettingsPage::failed() const 75 { 76 return m_fFailed; 77 } 78 79 /* Page 'failed' stuff: */ 80 void UISettingsPage::setFailed(bool fFailed) 81 { 82 m_fFailed = fFailed; 83 } 84 73 85 /* Settings page constructor, hidden: */ 74 86 UISettingsPage::UISettingsPage(UISettingsPageType type, QWidget *pParent) … … 77 89 , m_cId(-1) 78 90 , m_fProcessed(false) 91 , m_fFailed(false) 79 92 , m_pFirstWidget(0) 80 93 { -
trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.h
r33631 r34740 99 99 void setProcessed(bool fProcessed); 100 100 101 /* Page 'failed' stuff: */ 102 bool failed() const; 103 void setFailed(bool fFailed); 104 101 105 protected: 102 106 … … 108 112 int m_cId; 109 113 bool m_fProcessed; 114 bool m_fFailed; 110 115 QWidget *m_pFirstWidget; 111 116 }; -
trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp
r34562 r34740 334 334 const CHostNetworkInterfaceVector &interfaces = host.GetNetworkInterfaces(); 335 335 /* Remove all the old interfaces first: */ 336 for (int iNetworkIndex = 0; iNetworkIndex < interfaces.size() ; ++iNetworkIndex)336 for (int iNetworkIndex = 0; iNetworkIndex < interfaces.size() && !failed(); ++iNetworkIndex) 337 337 { 338 338 /* Get iterated interface: */ … … 350 350 { 351 351 progress.WaitForCompletion(-1); 352 // TODO: Fix problem reporter!353 //vboxProblem().showModalProgressDialog(progress, tr("Performing", "creating/removing host-only network"), "", this);354 352 if (progress.GetResultCode() != 0) 355 // TODO: Fix problem reporter! 356 //vboxProblem().cannotRemoveHostInterface(progress, iface, this); 357 AssertMsgFailed(("Failed to remove Host-only Network Adapter, result code is %d!\n", progress.GetResultCode())); 353 { 354 /* Mark the page as failed: */ 355 setFailed(true); 356 /* Show error message: */ 357 vboxProblem().cannotRemoveHostInterface(progress, iface); 358 } 358 359 } 359 360 else 360 // TODO: Fix problem reporter! 361 //vboxProblem().cannotRemoveHostInterface(host, iface, this); 362 AssertMsgFailed(("Failed to remove Host-only Network Adapter!\n")); 361 { 362 /* Mark the page as failed: */ 363 setFailed(true); 364 /* Show error message: */ 365 vboxProblem().cannotRemoveHostInterface(host, iface); 366 } 363 367 } 364 368 } 365 369 /* Add all the new interfaces finally: */ 366 for (int iNetworkIndex = 0; iNetworkIndex < m_cache.m_items.size() ; ++iNetworkIndex)370 for (int iNetworkIndex = 0; iNetworkIndex < m_cache.m_items.size() && !failed(); ++iNetworkIndex) 367 371 { 368 372 /* Get iterated data: */ … … 373 377 if (host.isOk()) 374 378 { 375 // TODO: Fix problem reporter!376 //vboxProblem().showModalProgressDialog(progress, tr("Performing", "creating/removing host-only network"), "", this);377 379 progress.WaitForCompletion(-1); 378 380 if (progress.GetResultCode() == 0) … … 423 425 } 424 426 else 425 // TODO: Fix problem reporter! 426 //vboxProblem().cannotCreateHostInterface(progress, this); 427 AssertMsgFailed(("Failed to create Host-only Network Adapter, result code is %d!\n", progress.GetResultCode())); 427 { 428 /* Mark the page as failed: */ 429 setFailed(true); 430 /* Show error message: */ 431 vboxProblem().cannotCreateHostInterface(progress); 432 } 428 433 } 429 434 else 430 // TODO: Fix problem reporter! 431 //vboxProblem().cannotCreateHostInterface(host, this); 432 AssertMsgFailed(("Failed to create Host-only Network Adapter!\n")); 435 { 436 /* Mark the page as failed: */ 437 setFailed(true); 438 /* Show error message: */ 439 vboxProblem().cannotCreateHostInterface(host); 440 } 433 441 } 434 442 -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp
r33882 r34740 356 356 void UIMachineSettingsSF::saveFromCacheToMachine(CMachine &machine) 357 357 { 358 /* Save machine items from internal cache: */ 359 /* Check if items were changed: */ 358 /* Check if items were NOT changed: */ 360 359 if (!mIsListViewChanged) 361 360 return; … … 363 362 /* Delete all machine folders first: */ 364 363 const CSharedFolderVector &folders = machine.GetSharedFolders(); 365 for (int iFolderIndex = 0; iFolderIndex < folders.size() ; ++iFolderIndex)364 for (int iFolderIndex = 0; iFolderIndex < folders.size() && !failed(); ++iFolderIndex) 366 365 { 367 366 const CSharedFolder &folder = folders[iFolderIndex]; … … 371 370 if (!machine.isOk()) 372 371 { 373 // TODO: Fix problem reporter! 374 //vboxProblem().cannotRemoveSharedFolder(this, machine, strFolderName, strFolderPath); 372 /* Mark the page as failed: */ 373 setFailed(true); 374 /* Show error message: */ 375 vboxProblem().cannotRemoveSharedFolder(machine, strFolderName, strFolderPath); 375 376 } 376 377 } 377 378 378 379 /* Save all new machine folders: */ 379 for (int iFolderIndex = 0; iFolderIndex < m_cache.m_items.size() ; ++iFolderIndex)380 for (int iFolderIndex = 0; iFolderIndex < m_cache.m_items.size() && !failed(); ++iFolderIndex) 380 381 { 381 382 const UISharedFolderData &data = m_cache.m_items[iFolderIndex]; … … 385 386 if (!machine.isOk()) 386 387 { 387 // TODO: Fix problem reporter! 388 //vboxProblem().cannotCreateSharedFolder(this, machine, data.m_strName, data.m_strHostPath); 388 /* Mark the page as failed: */ 389 setFailed(true); 390 /* Show error message: */ 391 vboxProblem().cannotCreateSharedFolder(machine, data.m_strName, data.m_strHostPath); 389 392 } 390 393 } … … 394 397 void UIMachineSettingsSF::saveFromCacheToConsole(CConsole &console) 395 398 { 396 /* Save console items from internal cache: */ 397 /* Check if items were changed: */ 399 /* Check if items were NOT changed: */ 398 400 if (!mIsListViewChanged) 399 401 return; … … 401 403 /* Delete all console folders first: */ 402 404 const CSharedFolderVector &folders = console.GetSharedFolders(); 403 for (int iFolderIndex = 0; iFolderIndex < folders.size() ; ++iFolderIndex)405 for (int iFolderIndex = 0; iFolderIndex < folders.size() && !failed(); ++iFolderIndex) 404 406 { 405 407 const CSharedFolder &folder = folders[iFolderIndex]; … … 409 411 if (!console.isOk()) 410 412 { 411 // TODO: Fix problem reporter! 412 //vboxProblem().cannotRemoveSharedFolder(this, console, strFolderName, strFolderPath); 413 /* Mark the page as failed: */ 414 setFailed(true); 415 /* Show error message: */ 416 vboxProblem().cannotRemoveSharedFolder(console, strFolderName, strFolderPath); 413 417 } 414 418 } 415 419 416 420 /* Save all new console folders: */ 417 for (int iFolderIndex = 0; iFolderIndex < m_cache.m_items.size() ; ++iFolderIndex)421 for (int iFolderIndex = 0; iFolderIndex < m_cache.m_items.size() && !failed(); ++iFolderIndex) 418 422 { 419 423 const UISharedFolderData &data = m_cache.m_items[iFolderIndex]; … … 423 427 if (!console.isOk()) 424 428 { 425 // TODO: Fix problem reporter! 426 //vboxProblem().cannotCreateSharedFolder(this, console, data.m_strName, data.m_strHostPath); 429 /* Mark the page as failed: */ 430 setFailed(true); 431 /* Show error message: */ 432 vboxProblem().cannotCreateSharedFolder(console, data.m_strName, data.m_strHostPath); 427 433 } 428 434 } -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
r34343 r34740 1922 1922 } 1923 1923 /* Save created controllers: */ 1924 for (int iControllerIndex = 0; iControllerIndex < m_cache.m_items.size() ; ++iControllerIndex)1924 for (int iControllerIndex = 0; iControllerIndex < m_cache.m_items.size() && !failed(); ++iControllerIndex) 1925 1925 { 1926 1926 const UIStorageControllerData &controllerData = m_cache.m_items[iControllerIndex]; … … 1930 1930 int cMaxUsedPort = -1; 1931 1931 /* Save created attachments: */ 1932 for (int iAttachmentIndex = 0; iAttachmentIndex < controllerData.m_items.size() ; ++iAttachmentIndex)1932 for (int iAttachmentIndex = 0; iAttachmentIndex < controllerData.m_items.size() && !failed(); ++iAttachmentIndex) 1933 1933 { 1934 1934 const UIStorageAttachmentData &attachmentData = controllerData.m_items[iAttachmentIndex]; … … 1948 1948 else 1949 1949 { 1950 // TODO: Fix problem reporter! 1951 //vboxProblem().cannotAttachDevice(this, m_machine, VBoxDefs::MediumType_HardDisk, vboxMedium.location(), 1952 // controllerData.m_controllerBus, attachmentData.m_iAttachmentPort, attachmentData.m_iAttachmentDevice); 1950 /* Mark the page as failed: */ 1951 setFailed(true); 1952 /* Show error message: */ 1953 vboxProblem().cannotAttachDevice(m_machine, VBoxDefs::MediumType_HardDisk, vboxMedium.location(), 1954 StorageSlot(controllerData.m_controllerBus, 1955 attachmentData.m_iAttachmentPort, 1956 attachmentData.m_iAttachmentDevice)); 1953 1957 } 1954 1958 } 1955 if ( controllerData.m_controllerBus == KStorageBus_SATA)1959 if (!failed() && controllerData.m_controllerBus == KStorageBus_SATA) 1956 1960 { 1957 1961 ULONG uSataPortsCount = cMaxUsedPort + 1; -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIFirstRunWzd.h
r29942 r34740 126 126 }; 127 127 128 Q_DECLARE_METATYPE(CMachine);129 130 128 #endif // __UIFirstRunWzd_h__ 131 129 -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp
r34736 r34740 832 832 m.AttachDevice(ctrHdName, 0, 0, KDeviceType_HardDisk, medium); 833 833 if (!m.isOk()) 834 vboxProblem().cannotAttachDevice( this, m, VBoxDefs::MediumType_HardDisk,835 field("hardDiskLocation").toString(), StorageSlot(ctrHdBus, 0, 0));834 vboxProblem().cannotAttachDevice(m, VBoxDefs::MediumType_HardDisk, field("hardDiskLocation").toString(), 835 StorageSlot(ctrHdBus, 0, 0), this); 836 836 } 837 837 … … 839 839 m.AttachDevice(ctrDvdName, 1, 0, KDeviceType_DVD, CMedium()); 840 840 if (!m.isOk()) 841 vboxProblem().cannotAttachDevice( this, m, VBoxDefs::MediumType_DVD, QString(), StorageSlot(ctrDvdBus, 1, 0));841 vboxProblem().cannotAttachDevice(m, VBoxDefs::MediumType_DVD, QString(), StorageSlot(ctrDvdBus, 1, 0), this); 842 842 843 843 if (m.isOk()) -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.h
r33668 r34740 200 200 }; 201 201 202 Q_DECLARE_METATYPE(CMachine);203 204 202 #endif // __UINewVMWzd_h__ 205 203
Note:
See TracChangeset
for help on using the changeset viewer.