Changeset 769 for trunk/src/gui/widgets/qmenu_wince.cpp
- Timestamp:
- Aug 2, 2010, 9:27:30 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.6.3 (added) merged: 768 /branches/vendor/nokia/qt/current merged: 767 /branches/vendor/nokia/qt/4.6.2 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/widgets/qmenu_wince.cpp
r651 r769 102 102 }; 103 103 104 typedef int (WINAPI *superfunc)(int, int);105 104 typedef BOOL (WINAPI *AygCreateMenuBar)(qt_SHMENUBARINFO*); 106 105 typedef HRESULT (WINAPI *AygEnableSoftKey)(HWND,UINT,BOOL,BOOL); … … 128 127 ptrEnableSoftKey(handle, command, false, true); 129 128 } 129 130 130 static void qt_wce_disable_soft_key(HWND handle, uint command) 131 131 { … … 135 135 } 136 136 137 static void qt_wce_delete_action_list(QList<QWceMenuAction*> *list) { 137 static void qt_wce_delete_action_list(QList<QWceMenuAction*> *list) 138 { 138 139 for(QList<QWceMenuAction*>::Iterator it = list->begin(); it != list->end(); ++it) { 139 140 QWceMenuAction *action = (*it); … … 145 146 146 147 //search for first QuitRole in QMenuBar 147 static QAction* qt_wce_get_quit_action(QList<QAction *> actionItems) { 148 static QAction* qt_wce_get_quit_action(QList<QAction *> actionItems) 149 { 148 150 QAction *returnAction = 0; 149 151 for (int i = 0; i < actionItems.size(); ++i) { … … 160 162 } 161 163 162 static QAction* qt_wce_get_quit_action(QList<QWceMenuAction*> actionItems) { 164 static QAction* qt_wce_get_quit_action(QList<QWceMenuAction*> actionItems) 165 { 163 166 for (int i = 0; i < actionItems.size(); ++i) { 164 167 if (actionItems.at(i)->action->menuRole() == QAction::QuitRole) … … 173 176 } 174 177 175 static HMODULE qt_wce_get_module_handle() { 178 static HMODULE qt_wce_get_module_handle() 179 { 176 180 HMODULE module = 0; //handle to resources 177 181 if (!(module = GetModuleHandle(L"QtGui4"))) //release dynamic … … 182 186 } 183 187 184 static void qt_wce_change_command(HWND menuHandle, int item, int command) { 188 static void qt_wce_change_command(HWND menuHandle, int item, int command) 189 { 185 190 TBBUTTONINFOA tbbi; 186 191 memset(&tbbi,0,sizeof(tbbi)); … … 191 196 } 192 197 193 static void qt_wce_rename_menu_item(HWND menuHandle, int item, const QString &newText) { 198 static void qt_wce_rename_menu_item(HWND menuHandle, int item, const QString &newText) 199 { 194 200 TBBUTTONINFOA tbbi; 195 201 memset(&tbbi,0,sizeof(tbbi)); … … 202 208 } 203 209 204 static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, int toolbarID, int flags = 0) { 210 static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, int toolbarID, int flags = 0) 211 { 205 212 resolveAygLibs(); 206 213 … … 227 234 } 228 235 229 static void qt_wce_insert_action(HMENU menu, QWceMenuAction *action , bool created) {230 236 static void qt_wce_insert_action(HMENU menu, QWceMenuAction *action) 237 { 231 238 Q_ASSERT_X(menu, "AppendMenu", "menu is 0"); 232 239 if (action->action->isVisible()) { … … 242 249 text.remove(QChar::fromLatin1('&')); 243 250 AppendMenu (menu, MF_STRING | flags | MF_POPUP, 244 (UINT) action->action->menu()->wceMenu( created), reinterpret_cast<const wchar_t *> (text.utf16()));251 (UINT) action->action->menu()->wceMenu(), reinterpret_cast<const wchar_t *> (text.utf16())); 245 252 } 246 253 else { … … 255 262 } 256 263 264 // Removes all items from the menu without destroying the handles. 265 static void qt_wce_clear_menu(HMENU hMenu) 266 { 267 while (RemoveMenu(hMenu, 0, MF_BYPOSITION)); 268 } 269 257 270 /*! 258 271 \internal … … 261 274 */ 262 275 263 void QMenuBar::wceRefresh() { 276 void QMenuBar::wceRefresh() 277 { 264 278 for (int i = 0; i < nativeMenuBars.size(); ++i) 265 279 nativeMenuBars.at(i)->d_func()->wceRefresh(); 266 280 } 267 281 268 void QMenuBarPrivate::wceRefresh() { 282 void QMenuBarPrivate::wceRefresh() 283 { 269 284 DrawMenuBar(wce_menubar->menubarHandle); 270 285 } … … 276 291 */ 277 292 278 QAction* QMenu::wceCommands(uint command) { 293 QAction* QMenu::wceCommands(uint command) 294 { 279 295 Q_D(QMenu); 280 296 return d->wceCommands(command); … … 288 304 */ 289 305 290 void QMenuBar::wceCommands(uint command, HWND) { 291 for (int i = 0; i < nativeMenuBars.size(); ++i) 292 nativeMenuBars.at(i)->d_func()->wceCommands(command); 293 } 294 295 bool QMenuBarPrivate::wceEmitSignals(QList<QWceMenuAction*> actions, uint command) { 306 void QMenuBar::wceCommands(uint command) 307 { 308 const HWND hwndActiveWindow = GetActiveWindow(); 309 for (int i = 0; i < nativeMenuBars.size(); ++i) { 310 QMenuBarPrivate* nativeMenuBar = nativeMenuBars.at(i)->d_func(); 311 if (hwndActiveWindow == nativeMenuBar->wce_menubar->parentWindowHandle) 312 nativeMenuBar->wceCommands(command); 313 } 314 } 315 316 bool QMenuBarPrivate::wceEmitSignals(QList<QWceMenuAction*> actions, uint command) 317 { 296 318 QAction *foundAction = 0; 297 319 for (int i = 0; i < actions.size(); ++i) { 298 if (foundAction)299 break;300 320 QWceMenuAction *action = actions.at(i); 301 321 if (action->action->menu()) { 302 322 foundAction = action->action->menu()->wceCommands(command); 323 if (foundAction) 324 break; 303 325 } 304 326 else if (action->command == command) { 305 emit q_func()->triggered(action->action);306 327 action->action->activate(QAction::Trigger); 307 328 return true; … … 315 336 } 316 337 317 void QMenuBarPrivate::wceCommands(uint command) { 338 void QMenuBarPrivate::wceCommands(uint command) 339 { 318 340 if (wceClassicMenu) { 319 341 for (int i = 0; i < wce_menubar->actionItemsClassic.size(); ++i) … … 321 343 } else { 322 344 if (wceEmitSignals(wce_menubar->actionItems, command)) { 323 return 345 return; 324 346 } 325 347 else if (wce_menubar->leftButtonIsMenu) {//check if command is on the left quick button … … 333 355 } 334 356 335 QAction *QMenuPrivate::wceCommands(uint command) { 357 QAction *QMenuPrivate::wceCommands(uint command) 358 { 336 359 QAction *foundAction = 0; 337 360 for (int i = 0; i < wce_menu->actionItems.size(); ++i) { … … 343 366 } 344 367 else if (action->command == command) { 345 acti on->action->activate(QAction::Trigger);368 activateAction(action->action, QAction::Trigger); 346 369 return action->action; 347 370 } … … 352 375 } 353 376 354 void QMenuBarPrivate::wceCreateMenuBar(QWidget *parent) {355 377 void QMenuBarPrivate::wceCreateMenuBar(QWidget *parent) 378 { 356 379 Q_Q(QMenuBar); 357 380 wce_menubar = new QWceMenuBarPrivate(this); … … 367 390 } 368 391 369 void QMenuBarPrivate::wceDestroyMenuBar() { 392 void QMenuBarPrivate::wceDestroyMenuBar() 393 { 370 394 Q_Q(QMenuBar); 371 395 int index = nativeMenuBars.indexOf(q); 372 396 nativeMenuBars.removeAt(index); 373 if (wce_menubar) 374 delete wce_menubar; 375 wce_menubar = 0; 376 } 377 378 QMenuBarPrivate::QWceMenuBarPrivate::QWceMenuBarPrivate(QMenuBarPrivate *menubar) : 379 menubarHandle(0), menuHandle(0),leftButtonMenuHandle(0) , 380 leftButtonAction(0), leftButtonIsMenu(false), d(menubar) { 381 } 382 383 QMenuBarPrivate::QWceMenuBarPrivate::~QWceMenuBarPrivate() { 397 if (wce_menubar) { 398 delete wce_menubar; 399 wce_menubar = 0; 400 } 401 } 402 403 QMenuBarPrivate::QWceMenuBarPrivate::QWceMenuBarPrivate(QMenuBarPrivate *menubar) 404 : menubarHandle(0), menuHandle(0), leftButtonMenuHandle(0), 405 leftButtonAction(0), leftButtonIsMenu(false), d(menubar) 406 { 407 } 408 409 QMenuBarPrivate::QWceMenuBarPrivate::~QWceMenuBarPrivate() 410 { 384 411 if (menubarHandle) 385 412 DestroyWindow(menubarHandle); … … 399 426 } 400 427 401 QMenuPrivate::QWceMenuPrivate::QWceMenuPrivate() { 402 menuHandle = 0; 403 } 404 405 QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate() { 428 QMenuPrivate::QWceMenuPrivate::QWceMenuPrivate() 429 : menuHandle(0) 430 { 431 } 432 433 QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate() 434 { 406 435 qt_wce_delete_action_list(&actionItems); 407 menuHandle = 0; 408 } 409 410 void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before) { 436 if (menuHandle) 437 DestroyMenu(menuHandle); 438 } 439 440 void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before) 441 { 411 442 QWceMenuAction *action = new QWceMenuAction; 412 443 action->action = a; … … 415 446 } 416 447 417 void QMenuPrivate::QWceMenuPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) { 448 void QMenuPrivate::QWceMenuPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) 449 { 418 450 if (!action) 419 451 return; … … 434 466 */ 435 467 436 HMENU QMenu::wceMenu(bool create) { return d_func()->wceMenu(create); } 437 438 HMENU QMenuPrivate::wceMenu(bool create) { 468 HMENU QMenu::wceMenu() 469 { 470 return d_func()->wceMenu(); 471 } 472 473 HMENU QMenuPrivate::wceMenu() 474 { 439 475 if (!wce_menu) 440 476 wce_menu = new QWceMenuPrivate; 441 if (!wce_menu->menuHandle || create)442 wce_menu->rebuild( create);477 if (!wce_menu->menuHandle) 478 wce_menu->rebuild(); 443 479 return wce_menu->menuHandle; 444 480 } 445 481 446 void QMenuPrivate::QWceMenuPrivate::rebuild(bool reCreate) { 447 if (menuHandle && !reCreate) 448 DestroyMenu(menuHandle); 449 menuHandle = CreatePopupMenu(); 482 void QMenuPrivate::QWceMenuPrivate::rebuild() 483 { 484 if (!menuHandle) 485 menuHandle = CreatePopupMenu(); 486 else 487 qt_wce_clear_menu(menuHandle); 488 450 489 for (int i = 0; i < actionItems.size(); ++i) { 451 490 QWceMenuAction *action = actionItems.at(i); 452 491 action->menuHandle = menuHandle; 453 qt_wce_insert_action(menuHandle, action , true);492 qt_wce_insert_action(menuHandle, action); 454 493 } 455 494 QMenuBar::wceRefresh(); 456 495 } 457 496 458 void QMenuPrivate::QWceMenuPrivate::syncAction(QWceMenuAction *) { 497 void QMenuPrivate::QWceMenuPrivate::syncAction(QWceMenuAction *) 498 { 459 499 rebuild(); 460 500 } 461 501 462 void QMenuPrivate::QWceMenuPrivate::removeAction(QWceMenuAction *action) { 463 actionItems.removeAll(action); 464 delete action; 465 action = 0; 466 rebuild(); 467 } 468 469 void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QWceMenuAction *before) { 502 void QMenuPrivate::QWceMenuPrivate::removeAction(QWceMenuAction *action) 503 { 504 actionItems.removeAll(action); 505 delete action; 506 rebuild(); 507 } 508 509 void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QWceMenuAction *before) 510 { 470 511 QWceMenuAction *action = new QWceMenuAction; 471 512 action->action = a; … … 474 515 } 475 516 476 void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) { 517 void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) 518 { 477 519 if (!action) 478 520 return; … … 486 528 } 487 529 488 void QMenuBarPrivate::QWceMenuBarPrivate::syncAction(QWceMenuAction*) { 530 void QMenuBarPrivate::QWceMenuBarPrivate::syncAction(QWceMenuAction*) 531 { 489 532 QMenuBar::wceRefresh(); 490 533 rebuild(); 491 534 } 492 535 493 void QMenuBarPrivate::QWceMenuBarPrivate::removeAction(QWceMenuAction *action) { 536 void QMenuBarPrivate::QWceMenuBarPrivate::removeAction(QWceMenuAction *action) 537 { 494 538 actionItems.removeAll(action); 495 539 delete action; 496 action = 0;497 540 rebuild(); 498 541 } 499 542 500 void QMenuBarPrivate::_q_updateDefaultAction() { 543 void QMenuBarPrivate::_q_updateDefaultAction() 544 { 501 545 if (wce_menubar) 502 546 wce_menubar->rebuild(); 503 547 } 504 548 505 void QMenuBarPrivate::QWceMenuBarPrivate::rebuild() {506 549 void QMenuBarPrivate::QWceMenuBarPrivate::rebuild() 550 { 507 551 d->q_func()->resize(0,0); 508 552 parentWindowHandle = d->q_func()->parentWidget() ? d->q_func()->parentWidget()->winId() : d->q_func()->winId(); … … 523 567 } 524 568 Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted"); 569 qt_wce_clear_menu(menuHandle); 525 570 DestroyWindow(menubarHandle); 526 571 menubarHandle = qt_wce_create_menubar(parentWindowHandle, qt_wce_get_module_handle(), resourceHandle); … … 550 595 action->menuHandle = subMenuHandle; 551 596 actionItemsClassic.last().append(action); 552 qt_wce_insert_action(subMenuHandle, action , true);597 qt_wce_insert_action(subMenuHandle, action); 553 598 } 554 599 } … … 564 609 leftButtonIsMenu = (leftButtonAction && leftButtonAction->menu()); 565 610 Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted"); 611 qt_wce_clear_menu(menuHandle); 566 612 DestroyWindow(menubarHandle); 567 613 if (leftButtonIsMenu) { … … 592 638 QWceMenuAction *action = actionItems.at(i); 593 639 action->menuHandle = menuHandle; 594 qt_wce_insert_action(menuHandle, action , true);640 qt_wce_insert_action(menuHandle, action); 595 641 } 596 642 if (!leftButtonIsMenu) { … … 612 658 action->menuHandle = leftButtonMenuHandle; 613 659 actionItemsLeftButton.append(action); 614 qt_wce_insert_action(leftButtonMenuHandle, action , true);660 qt_wce_insert_action(leftButtonMenuHandle, action); 615 661 } 616 662 }
Note:
See TracChangeset
for help on using the changeset viewer.