Exemplo n.º 1
0
/*
 * disableSpy - set spy to stopped state
 */
static void disableSpy( void )
{
    ClearFilter();
    CheckMenuItem( SpyMenu, SPY_ALL_WINDOWS, MF_UNCHECKED );
    EnableMenuItem( SpyMenu, SPY_ADD_WINDOW, MF_GRAYED );
    EnableMenuItem( SpyMenu, SPY_STOP, MF_GRAYED );
    SetSpyState( NEITHER );
    spyAll = FALSE;

} /* disableSpy */
Exemplo n.º 2
0
/*
 * SpyFini - cleanup at end
 */
void SpyFini( void )
{
#ifndef NOUSE3D
    CvrCtl3dUnregister( Instance );
    CvrCtl3DFini( Instance );
#endif
    ClearFilter();
    SpyLogClose();
    SaveSpyConfig( NULL );
    JDialogFini();

} /* SpyFini */
Exemplo n.º 3
0
void DeckBuilder::ClearSearch() {
    mainGame->cbCardType->setSelected(0);
    mainGame->cbCardType2->setSelected(0);
    mainGame->cbCardType2->setEnabled(false);
    mainGame->cbRace->setEnabled(false);
    mainGame->cbAttribute->setEnabled(false);
    mainGame->ebAttack->setEnabled(false);
    mainGame->ebDefense->setEnabled(false);
    mainGame->ebStar->setEnabled(false);
    mainGame->ebScale->setEnabled(false);
    mainGame->ebCardName->setText(L"");
    ClearFilter();
}
Exemplo n.º 4
0
void DeckBuilder::ClearSearch() {
	mainGame->cbCardType->setSelected(0);
	mainGame->cbCardType2->setSelected(0);
	mainGame->cbCardType2->setEnabled(false);
	mainGame->cbRace->setEnabled(false);
	mainGame->cbAttribute->setEnabled(false);
	mainGame->ebAttack->setEnabled(false);
	mainGame->ebDefense->setEnabled(false);
	mainGame->ebStar->setEnabled(false);
	mainGame->ebScale->setEnabled(false);
	mainGame->ebCardName->setText(L"");
	ClearFilter();
	results.clear();
	myswprintf(result_string, L"%d", 0);
}
Exemplo n.º 5
0
void CFilterEditDialog::OnDelete(wxCommandEvent& event)
{
	int item = m_pFilterListCtrl->GetSelection();
	if (item == -1)
		return;

	m_currentSelection = -1;
	m_pFilterListCtrl->Delete(item);
	m_filters.erase(m_filters.begin() + item);

	// Remote filter from all filter sets
	for (std::vector<CFilterSet>::iterator iter = m_filterSets.begin(); iter != m_filterSets.end(); iter++)
	{
		CFilterSet& set = *iter;
		set.local.erase(set.local.begin() + item);
		set.remote.erase(set.remote.begin() + item);
	}

	ClearFilter(true);
	SetCtrlState(false);
}
Exemplo n.º 6
0
void CManageFiltersDlg::OnClick(NMHDR *pNotifyStruct, LRESULT *pLResult)
{
  LPNMITEMACTIVATE pNMLV = reinterpret_cast<LPNMITEMACTIVATE>(pNotifyStruct);

  // Ignore clicks on Properties ListCtrl (doesn't seem to do much though!)
  if (pNMLV->hdr.idFrom == IDC_FILTERPROPERTIES) {
    *pLResult = TRUE;
    return;
  }

  *pLResult = FALSE;

  if (pNMLV->iItem < 0) {
    return;
  }

  GetDlgItem(IDC_FILTEREDIT)->EnableWindow(TRUE);
  GetDlgItem(IDC_FILTERDELETE)->EnableWindow(TRUE);

  st_FilterItemData *pflt_idata;
  m_selectedfilter = pNMLV->iItem;
  m_selectedfiltername = m_FilterLC.GetItemText(m_selectedfilter, 0);
  pflt_idata = (st_FilterItemData *)m_FilterLC.GetItemData(m_selectedfilter);
  m_selectedfilterpool = pflt_idata->flt_key.fpool;

  CRect rect, image_rect;
  m_FilterLC.GetSubItemRect(pNMLV->iItem, pNMLV->iSubItem, LVIR_BOUNDS, rect);
  CPoint cpt = rect.CenterPoint();
  image_rect.SetRect(cpt.x - 7, cpt.y - 7, cpt.x + 7, cpt.y + 7);
  image_rect.NormalizeRect();
  BOOL bOnImage = image_rect.PtInRect(pNMLV->ptAction);

  switch (pNMLV->iSubItem) {
    case MFLC_INUSE:
      if (bOnImage == TRUE) {
        if ((pflt_idata->flt_flags & MFLT_INUSE) == MFLT_INUSE) {
          pflt_idata->flt_flags &= ~MFLT_INUSE;
          ClearFilter();
        } else {
          pflt_idata->flt_flags |= MFLT_INUSE;
          SetFilter();
        }
      }
      break;
    case MFLC_COPYTODATABASE:
      if (!m_bDBReadOnly) {
        if (bOnImage == TRUE && pflt_idata->flt_key.fpool != FPOOL_DATABASE) {
          if ((pflt_idata->flt_flags & MFLT_REQUEST_COPY_TO_DB) == MFLT_REQUEST_COPY_TO_DB) {
            pflt_idata->flt_flags &= ~MFLT_REQUEST_COPY_TO_DB;
            m_num_to_copy--;
          } else {
            pflt_idata->flt_flags |= MFLT_REQUEST_COPY_TO_DB;
            m_num_to_copy++;
          }
          GetDlgItem(IDC_FILTERCOPY)->EnableWindow(m_num_to_copy > 0);
        }
      }
      break;
    case MFLC_EXPORT:
      if (bOnImage == TRUE) {
        if ((pflt_idata->flt_flags & MFLT_REQUEST_EXPORT) == MFLT_REQUEST_EXPORT) {
          pflt_idata->flt_flags &= ~MFLT_REQUEST_EXPORT;
          m_num_to_export--;
        } else {
          pflt_idata->flt_flags |= MFLT_REQUEST_EXPORT;
          m_num_to_export++;
        }
        GetDlgItem(IDC_FILTEREXPORT)->EnableWindow(m_num_to_export > 0);
      }
      break;
    default:
      break;
  }

  m_FilterProperties.DeleteAllItems();
  GetDlgItem(IDC_STATIC_FILTERNAME)->SetWindowText(m_selectedfiltername);

  PWSFilters::iterator mf_iter;
  st_Filterkey flt_key;
  flt_key.fpool = m_selectedfilterpool;
  flt_key.cs_filtername = m_selectedfiltername;

  mf_iter = m_MapMFDFilters.find(flt_key);
  if (mf_iter == m_MapMFDFilters.end())
    return;

  st_filters *pfilters = &mf_iter->second;
  DisplayFilterProperties(pfilters);

  m_FilterLC.Invalidate();
}
Exemplo n.º 7
0
bool ServiceMonTask::task_cancel()
{
	ClearFilter();
	return true ;
}
Exemplo n.º 8
0
GmJobItem::~GmJobItem ()
{
	ClearFilter ();
	ClearSources ();
	ClearPlan ();
}
Exemplo n.º 9
0
bool DeckBuilder::OnEvent(const irr::SEvent& event) {
    switch(event.EventType) {
    case irr::EET_GUI_EVENT: {
        s32 id = event.GUIEvent.Caller->getID();
        if(mainGame->wCategories->isVisible() && id != BUTTON_CATEGORY_OK)
            break;
        if(mainGame->wQuery->isVisible() && id != BUTTON_YES && id != BUTTON_NO)
            break;
        switch(event.GUIEvent.EventType) {
        case irr::gui::EGET_BUTTON_CLICKED: {
            switch(id) {
            case BUTTON_CLEAR_DECK: {
                mainGame->gMutex.Lock();
                mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)dataManager.GetSysString(1339));
                mainGame->PopupElement(mainGame->wQuery);
                mainGame->gMutex.Unlock();
                is_clearing = true;
                break;
            }
            case BUTTON_SORT_DECK: {
                std::sort(deckManager.current_deck.main.begin(), deckManager.current_deck.main.end(), ClientCard::deck_sort_lv);
                std::sort(deckManager.current_deck.extra.begin(), deckManager.current_deck.extra.end(), ClientCard::deck_sort_lv);
                std::sort(deckManager.current_deck.side.begin(), deckManager.current_deck.side.end(), ClientCard::deck_sort_lv);
                break;
            }
            case BUTTON_SHUFFLE_DECK: {
                std::random_shuffle(deckManager.current_deck.main.begin(), deckManager.current_deck.main.end());
                break;
            }
            case BUTTON_SAVE_DECK: {
                if(deckManager.SaveDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(mainGame->cbDBDecks->getSelected()))) {
                    mainGame->stACMessage->setText(dataManager.GetSysString(1335));
                    mainGame->PopupElement(mainGame->wACMessage, 20);
                }
                break;
            }
            case BUTTON_SAVE_DECK_AS: {
                const wchar_t* dname = mainGame->ebDeckname->getText();
                if(*dname == 0)
                    break;
                int sel = -1;
                for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) {
                    if(!wcscmp(dname, mainGame->cbDBDecks->getItem(i))) {
                        sel = i;
                        break;
                    }
                }
                if(sel >= 0)
                    mainGame->cbDBDecks->setSelected(sel);
                else {
                    mainGame->cbDBDecks->addItem(dname);
                    mainGame->cbDBDecks->setSelected(mainGame->cbDBDecks->getItemCount() - 1);
                }
                if(deckManager.SaveDeck(deckManager.current_deck, dname)) {
                    mainGame->stACMessage->setText(dataManager.GetSysString(1335));
                    mainGame->PopupElement(mainGame->wACMessage, 20);
                }
                break;
            }
            case BUTTON_DELETE_DECK: {
                int sel = mainGame->cbDBDecks->getSelected();
                if(sel == -1)
                    break;
                mainGame->gMutex.Lock();
                wchar_t textBuffer[256];
                myswprintf(textBuffer, L"%ls\n%ls", mainGame->cbDBDecks->getItem(sel), dataManager.GetSysString(1337));
                mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)textBuffer);
                mainGame->PopupElement(mainGame->wQuery);
                mainGame->gMutex.Unlock();
                is_deleting = true;
                break;
            }
            case BUTTON_LEAVE_GAME: {
                mainGame->is_building = false;
                mainGame->wDeckEdit->setVisible(false);
                mainGame->wCategories->setVisible(false);
                mainGame->wFilter->setVisible(false);
                mainGame->wSort->setVisible(false);
                mainGame->wCardImg->setVisible(false);
                mainGame->wInfos->setVisible(false);
                mainGame->btnLeaveGame->setVisible(false);
                mainGame->PopupElement(mainGame->wMainMenu);
                mainGame->device->setEventReceiver(&mainGame->menuHandler);
                mainGame->wACMessage->setVisible(false);
                imageManager.ClearTexture();
                mainGame->scrFilter->setVisible(false);
                if(mainGame->cbDBDecks->getSelected() != -1) {
                    BufferIO::CopyWStr(mainGame->cbDBDecks->getItem(mainGame->cbDBDecks->getSelected()), mainGame->gameConf.lastdeck, 64);
                }
                if(exit_on_return)
                    mainGame->device->closeDevice();
                break;
            }
            case BUTTON_EFFECT_FILTER: {
                mainGame->PopupElement(mainGame->wCategories);
                break;
            }
            case BUTTON_START_FILTER: {
                filter_type = mainGame->cbCardType->getSelected();
                filter_type2 = mainGame->cbCardType2->getItemData(mainGame->cbCardType2->getSelected());
                filter_lm = mainGame->cbLimit->getSelected();
                if(filter_type == 1) {
                    filter_attrib = mainGame->cbAttribute->getItemData(mainGame->cbAttribute->getSelected());
                    filter_race = mainGame->cbRace->getItemData(mainGame->cbRace->getSelected());
                    filter_atk = parse_filter(mainGame->ebAttack->getText(), &filter_atktype);
                    filter_def = parse_filter(mainGame->ebDefense->getText(), &filter_deftype);
                    filter_lv = parse_filter(mainGame->ebStar->getText(), &filter_lvtype);
                    filter_scl = parse_filter(mainGame->ebScale->getText(), &filter_scltype);
                }
                FilterCards();
                if(!mainGame->gameConf.separate_clear_button)
                    ClearFilter();
                break;
            }
            case BUTTON_CLEAR_FILTER: {
                ClearSearch();
                break;
            }
            case BUTTON_CATEGORY_OK: {
                filter_effect = 0;
                long long filter = 0x1;
                for(int i = 0; i < 32; ++i, filter <<= 1)
                    if(mainGame->chkCategory[i]->isChecked())
                        filter_effect |= filter;
                mainGame->HideElement(mainGame->wCategories);
                break;
            }
            case BUTTON_SIDE_OK: {
                if(deckManager.current_deck.main.size() != pre_mainc || deckManager.current_deck.extra.size() != pre_extrac
                        || deckManager.current_deck.side.size() != pre_sidec) {
                    mainGame->env->addMessageBox(L"", dataManager.GetSysString(1410));
                    break;
                }
                char deckbuf[1024];
                char* pdeck = deckbuf;
                BufferIO::WriteInt32(pdeck, deckManager.current_deck.main.size() + deckManager.current_deck.extra.size());
                BufferIO::WriteInt32(pdeck, deckManager.current_deck.side.size());
                for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
                    BufferIO::WriteInt32(pdeck, deckManager.current_deck.main[i]->first);
                for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
                    BufferIO::WriteInt32(pdeck, deckManager.current_deck.extra[i]->first);
                for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
                    BufferIO::WriteInt32(pdeck, deckManager.current_deck.side[i]->first);
                DuelClient::SendBufferToServer(CTOS_UPDATE_DECK, deckbuf, pdeck - deckbuf);
                break;
            }
            case BUTTON_YES: {
                mainGame->HideElement(mainGame->wQuery);
                if(!mainGame->is_building || mainGame->is_siding)
                    break;
                if(is_clearing) {
                    deckManager.current_deck.main.clear();
                    deckManager.current_deck.extra.clear();
                    deckManager.current_deck.side.clear();
                } else if(is_deleting) {
                    int sel = mainGame->cbDBDecks->getSelected();
                    if (deckManager.DeleteDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) {
                        mainGame->cbDBDecks->removeItem(sel);
                        int count = mainGame->cbDBDecks->getItemCount();
                        if (sel >= count)
                            sel = count - 1;
                        mainGame->cbDBDecks->setSelected(sel);
                        if (sel != -1)
                            deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel));
                        mainGame->stACMessage->setText(dataManager.GetSysString(1338));
                        mainGame->PopupElement(mainGame->wACMessage, 20);
                    }
                }
                is_clearing = false;
                is_deleting = false;
                break;
            }
            case BUTTON_NO: {
                mainGame->HideElement(mainGame->wQuery);
                is_deleting = false;
                is_clearing = false;
                break;
            }
            }
            break;
        }
        case irr::gui::EGET_SCROLL_BAR_CHANGED: {
            switch(id) {
            case SCROLL_CARDTEXT: {
                u32 pos = mainGame->scrCardText->getPos();
                mainGame->SetStaticText(mainGame->stText, mainGame->stText->getRelativePosition().getWidth()-25, mainGame->textFont, mainGame->showingtext, pos);
                break;
            }
            break;
            }
        }
        case irr::gui::EGET_EDITBOX_ENTER: {
            switch(id) {
            case EDITBOX_KEYWORD: {
                irr::SEvent me;
                me.EventType = irr::EET_GUI_EVENT;
                me.GUIEvent.EventType = irr::gui::EGET_BUTTON_CLICKED;
                me.GUIEvent.Caller = mainGame->btnStartFilter;
                me.GUIEvent.Element = mainGame->btnStartFilter;
                mainGame->device->postEventFromUser(me);
                break;
            }
            }
            break;
        }
        case irr::gui::EGET_COMBO_BOX_CHANGED: {
            switch(id) {
            case COMBOBOX_DBLFLIST: {
                filterList = deckManager._lfList[mainGame->cbDBLFList->getSelected()].content;
                break;
            }
            case COMBOBOX_DBDECKS: {
                deckManager.LoadDeck(mainGame->cbDBDecks->getItem(mainGame->cbDBDecks->getSelected()));
                break;
            }
            case COMBOBOX_MAINTYPE: {
                mainGame->cbCardType2->setSelected(0);
                mainGame->cbAttribute->setSelected(0);
                mainGame->cbRace->setSelected(0);
                mainGame->ebAttack->setText(L"");
                mainGame->ebDefense->setText(L"");
                mainGame->ebStar->setText(L"");
                mainGame->ebScale->setText(L"");
                switch(mainGame->cbCardType->getSelected()) {
                case 0: {
                    mainGame->cbCardType2->setEnabled(false);
                    mainGame->cbCardType2->setSelected(0);
                    mainGame->cbRace->setEnabled(false);
                    mainGame->cbAttribute->setEnabled(false);
                    mainGame->ebAttack->setEnabled(false);
                    mainGame->ebDefense->setEnabled(false);
                    mainGame->ebStar->setEnabled(false);
                    mainGame->ebScale->setEnabled(false);
                    break;
                }
                case 1: {
                    wchar_t normaltuner[32];
                    wchar_t normalpen[32];
                    wchar_t syntuner[32];
                    mainGame->cbCardType2->setEnabled(true);
                    mainGame->cbRace->setEnabled(true);
                    mainGame->cbAttribute->setEnabled(true);
                    mainGame->ebAttack->setEnabled(true);
                    mainGame->ebDefense->setEnabled(true);
                    mainGame->ebStar->setEnabled(true);
                    mainGame->ebScale->setEnabled(true);
                    mainGame->cbCardType2->clear();
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1080), 0);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1054), TYPE_MONSTER + TYPE_NORMAL);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1055), TYPE_MONSTER + TYPE_EFFECT);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1056), TYPE_MONSTER + TYPE_FUSION);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1057), TYPE_MONSTER + TYPE_RITUAL);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1063), TYPE_MONSTER + TYPE_SYNCHRO);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1073), TYPE_MONSTER + TYPE_XYZ);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1074), TYPE_MONSTER + TYPE_PENDULUM);
                    myswprintf(normaltuner, L"%ls|%ls", dataManager.GetSysString(1054), dataManager.GetSysString(1062));
                    mainGame->cbCardType2->addItem(normaltuner, TYPE_MONSTER + TYPE_NORMAL + TYPE_TUNER);
                    myswprintf(normalpen, L"%ls|%ls", dataManager.GetSysString(1054), dataManager.GetSysString(1074));
                    mainGame->cbCardType2->addItem(normalpen, TYPE_MONSTER + TYPE_NORMAL + TYPE_PENDULUM);
                    myswprintf(syntuner, L"%ls|%ls", dataManager.GetSysString(1063), dataManager.GetSysString(1062));
                    mainGame->cbCardType2->addItem(syntuner, TYPE_MONSTER + TYPE_SYNCHRO + TYPE_TUNER);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1062), TYPE_MONSTER + TYPE_TUNER);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1061), TYPE_MONSTER + TYPE_DUAL);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1060), TYPE_MONSTER + TYPE_UNION);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1059), TYPE_MONSTER + TYPE_SPIRIT);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1071), TYPE_MONSTER + TYPE_FLIP);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1072), TYPE_MONSTER + TYPE_TOON);
                    break;
                }
                case 2: {
                    mainGame->cbCardType2->setEnabled(true);
                    mainGame->cbRace->setEnabled(false);
                    mainGame->cbAttribute->setEnabled(false);
                    mainGame->ebAttack->setEnabled(false);
                    mainGame->ebDefense->setEnabled(false);
                    mainGame->ebStar->setEnabled(false);
                    mainGame->ebScale->setEnabled(false);
                    mainGame->cbCardType2->clear();
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1080), 0);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1054), TYPE_SPELL);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1066), TYPE_SPELL + TYPE_QUICKPLAY);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1067), TYPE_SPELL + TYPE_CONTINUOUS);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1057), TYPE_SPELL + TYPE_RITUAL);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1068), TYPE_SPELL + TYPE_EQUIP);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1069), TYPE_SPELL + TYPE_FIELD);
                    break;
                }
                case 3: {
                    mainGame->cbCardType2->setEnabled(true);
                    mainGame->cbRace->setEnabled(false);
                    mainGame->cbAttribute->setEnabled(false);
                    mainGame->ebAttack->setEnabled(false);
                    mainGame->ebDefense->setEnabled(false);
                    mainGame->ebStar->setEnabled(false);
                    mainGame->ebScale->setEnabled(false);
                    mainGame->cbCardType2->clear();
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1080), 0);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1054), TYPE_TRAP);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1067), TYPE_TRAP + TYPE_CONTINUOUS);
                    mainGame->cbCardType2->addItem(dataManager.GetSysString(1070), TYPE_TRAP + TYPE_COUNTER);
                    break;
                }
                }
                break;
            }
            case COMBOBOX_SORTTYPE: {
                SortList();
                mainGame->env->setFocus(0);
                break;
            }
            }
        }
        default:
            break;
        }
        break;
    }
    case irr::EET_MOUSE_INPUT_EVENT: {
        switch(event.MouseInput.Event) {
        case irr::EMIE_LMOUSE_PRESSED_DOWN: {
            irr::core::position2di mouse_pos(event.MouseInput.X, event.MouseInput.Y);
            irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
            if(root->getElementFromPoint(mouse_pos) != root)
                break;
            if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible())
                break;
            if(hovered_pos == 0 || hovered_seq == -1)
                break;
            click_pos = hovered_pos;
            dragx = event.MouseInput.X;
            dragy = event.MouseInput.Y;
            draging_pointer = dataManager.GetCodePointer(hovered_code);
            if(draging_pointer == dataManager._datas.end())
                break;
            unsigned int limitcode = draging_pointer->second.alias ? draging_pointer->second.alias : draging_pointer->first;
            if(hovered_pos == 4) {
                int limit = 3;
                if(filterList->count(limitcode))
                    limit = (*filterList)[limitcode];
                for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
                    if(deckManager.current_deck.main[i]->first == limitcode
                            || deckManager.current_deck.main[i]->second.alias == limitcode)
                        limit--;
                for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
                    if(deckManager.current_deck.extra[i]->first == limitcode
                            || deckManager.current_deck.extra[i]->second.alias == limitcode)
                        limit--;
                for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
                    if(deckManager.current_deck.side[i]->first == limitcode
                            || deckManager.current_deck.side[i]->second.alias == limitcode)
                        limit--;
                if(limit <= 0)
                    break;
            }
            if(hovered_pos == 1)
                deckManager.current_deck.main.erase(deckManager.current_deck.main.begin() + hovered_seq);
            else if(hovered_pos == 2)
                deckManager.current_deck.extra.erase(deckManager.current_deck.extra.begin() + hovered_seq);
            else if(hovered_pos == 3)
                deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
            is_draging = true;
            break;
        }
        case irr::EMIE_LMOUSE_LEFT_UP: {
            if(!is_draging)
                break;
            if(!mainGame->is_siding) {
                if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)))
                    hovered_pos = 0;
                if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 60) {
                    if(hovered_seq == -1)
                        deckManager.current_deck.main.push_back(draging_pointer);
                    else if(hovered_seq < (int)deckManager.current_deck.main.size() && hovered_pos)
                        deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer);
                    else deckManager.current_deck.main.push_back(draging_pointer);
                    is_draging = false;
                } else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 15) {
                    if(hovered_seq == -1)
                        deckManager.current_deck.extra.push_back(draging_pointer);
                    else if(hovered_seq < (int)deckManager.current_deck.extra.size() && hovered_pos)
                        deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer);
                    else deckManager.current_deck.extra.push_back(draging_pointer);
                    is_draging = false;
                } else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 15) {
                    if(hovered_seq == -1)
                        deckManager.current_deck.side.push_back(draging_pointer);
                    else if(hovered_seq < (int)deckManager.current_deck.side.size() && hovered_pos)
                        deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
                    else deckManager.current_deck.side.push_back(draging_pointer);
                    is_draging = false;
                } else if (hovered_pos == 4)
                    is_draging = false;
            } else {
                if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)) || hovered_pos == 4)
                    hovered_pos = 0;
                if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 65) {
                    if(hovered_seq == -1)
                        deckManager.current_deck.main.push_back(draging_pointer);
                    else if(hovered_seq < (int)deckManager.current_deck.main.size() && hovered_pos)
                        deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer);
                    else deckManager.current_deck.main.push_back(draging_pointer);
                    is_draging = false;
                } else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 20) {
                    if(hovered_seq == -1)
                        deckManager.current_deck.extra.push_back(draging_pointer);
                    else if(hovered_seq < (int)deckManager.current_deck.extra.size() && hovered_pos)
                        deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer);
                    else deckManager.current_deck.extra.push_back(draging_pointer);
                    is_draging = false;
                } else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 20) {
                    if(hovered_seq == -1)
                        deckManager.current_deck.side.push_back(draging_pointer);
                    else if(hovered_seq < (int)deckManager.current_deck.side.size() && hovered_pos)
                        deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
                    else deckManager.current_deck.side.push_back(draging_pointer);
                    is_draging = false;
                }
            }
            if(is_draging) {
                if(click_pos == 1)
                    deckManager.current_deck.main.push_back(draging_pointer);
                else if(click_pos == 2)
                    deckManager.current_deck.extra.push_back(draging_pointer);
                else if(click_pos == 3)
                    deckManager.current_deck.side.push_back(draging_pointer);
            }
            is_draging = false;
            break;
        }
        case irr::EMIE_RMOUSE_LEFT_UP: {
            if(mainGame->is_siding) {
                if(is_draging)
                    break;
                if(hovered_pos == 0 || hovered_seq == -1)
                    break;
                draging_pointer = dataManager.GetCodePointer(hovered_code);
                if(draging_pointer == dataManager._datas.end())
                    break;
                if(hovered_pos == 1) {
                    if(deckManager.current_deck.side.size() < 20) {
                        deckManager.current_deck.main.erase(deckManager.current_deck.main.begin() + hovered_seq);
                        deckManager.current_deck.side.push_back(draging_pointer);
                    }
                } else if(hovered_pos == 2) {
                    if(deckManager.current_deck.side.size() < 20) {
                        deckManager.current_deck.extra.erase(deckManager.current_deck.extra.begin() + hovered_seq);
                        deckManager.current_deck.side.push_back(draging_pointer);
                    }
                } else {
                    if((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 20) {
                        deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
                        deckManager.current_deck.extra.push_back(draging_pointer);
                    }
                    if(!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 64) {
                        deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
                        deckManager.current_deck.main.push_back(draging_pointer);
                    }
                }
                break;
            }
            if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible())
                break;
            if(hovered_pos == 0 || hovered_seq == -1)
                break;
            if(!is_draging) {
                draging_pointer = dataManager.GetCodePointer(hovered_code);
                if(draging_pointer == dataManager._datas.end())
                    break;
            }
            if(hovered_pos == 1) {
                if(!is_draging)
                    deckManager.current_deck.main.erase(deckManager.current_deck.main.begin() + hovered_seq);
                else if(deckManager.current_deck.side.size() < 15) {
                    deckManager.current_deck.side.push_back(draging_pointer);
                    is_draging = false;
                }
            } else if(hovered_pos == 2) {
                if(!is_draging)
                    deckManager.current_deck.extra.erase(deckManager.current_deck.extra.begin() + hovered_seq);
                else if(deckManager.current_deck.side.size() < 15) {
                    deckManager.current_deck.side.push_back(draging_pointer);
                    is_draging = false;
                }
            } else if(hovered_pos == 3) {
                if(!is_draging)
                    deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
                else {
                    if((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15) {
                        deckManager.current_deck.extra.push_back(draging_pointer);
                        is_draging = false;
                    } else if(!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) {
                        deckManager.current_deck.main.push_back(draging_pointer);
                        is_draging = false;
                    }
                }
            } else {
                if(is_draging) {
                    if(deckManager.current_deck.side.size() < 15) {
                        deckManager.current_deck.side.push_back(draging_pointer);
                        is_draging = false;
                    }
                } else {
                    unsigned int limitcode = draging_pointer->second.alias ? draging_pointer->second.alias : draging_pointer->first;
                    int limit = 3;
                    if(filterList->count(limitcode))
                        limit = (*filterList)[limitcode];
                    for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
                        if(deckManager.current_deck.main[i]->first == limitcode
                                || deckManager.current_deck.main[i]->second.alias == limitcode)
                            limit--;
                    for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
                        if(deckManager.current_deck.extra[i]->first == limitcode
                                || deckManager.current_deck.extra[i]->second.alias == limitcode)
                            limit--;
                    for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
                        if(deckManager.current_deck.side[i]->first == limitcode
                                || deckManager.current_deck.side[i]->second.alias == limitcode)
                            limit--;
                    if(limit <= 0)
                        break;
                    if((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15) {
                        deckManager.current_deck.extra.push_back(draging_pointer);
                    } else if(!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) {
                        deckManager.current_deck.main.push_back(draging_pointer);
                    } else if (deckManager.current_deck.side.size() < 15) {
                        deckManager.current_deck.side.push_back(draging_pointer);
                    }
                }
            }
            break;
        }
        case irr::EMIE_MMOUSE_LEFT_UP: {
            if (mainGame->is_siding)
                break;
            if (mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible())
                break;
            if (hovered_pos == 0 || hovered_seq == -1)
                break;
            if (is_draging)
                break;
            draging_pointer = dataManager.GetCodePointer(hovered_code);
            unsigned int limitcode = draging_pointer->second.alias ? draging_pointer->second.alias : draging_pointer->first;
            int limit = 3;
            if (filterList->count(limitcode))
                limit = (*filterList)[limitcode];
            for (size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
                if (deckManager.current_deck.main[i]->first == limitcode
                        || deckManager.current_deck.main[i]->second.alias == limitcode)
                    limit--;
            for (size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
                if (deckManager.current_deck.extra[i]->first == limitcode
                        || deckManager.current_deck.extra[i]->second.alias == limitcode)
                    limit--;
            for (size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
                if (deckManager.current_deck.side[i]->first == limitcode
                        || deckManager.current_deck.side[i]->second.alias == limitcode)
                    limit--;
            if (limit <= 0)
                break;
            if (hovered_pos == 1) {
                if (deckManager.current_deck.main.size() < 60)
                    deckManager.current_deck.main.push_back(draging_pointer);
                else if (deckManager.current_deck.side.size() < 15)
                    deckManager.current_deck.side.push_back(draging_pointer);
            } else if (hovered_pos == 2) {
                if (deckManager.current_deck.extra.size() < 15)
                    deckManager.current_deck.extra.push_back(draging_pointer);
                else if (deckManager.current_deck.side.size() < 15)
                    deckManager.current_deck.side.push_back(draging_pointer);
            } else if (hovered_pos == 3) {
                if (deckManager.current_deck.side.size() < 15)
                    deckManager.current_deck.side.push_back(draging_pointer);
                else {
                    if ((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15)
                        deckManager.current_deck.extra.push_back(draging_pointer);
                    else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60)
                        deckManager.current_deck.main.push_back(draging_pointer);
                }
            } else {
                if ((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15)
                    deckManager.current_deck.extra.push_back(draging_pointer);
                else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60)
                    deckManager.current_deck.main.push_back(draging_pointer);
                else if (deckManager.current_deck.side.size() < 15)
                    deckManager.current_deck.side.push_back(draging_pointer);
            }
            break;
        }
        case irr::EMIE_MOUSE_MOVED: {
            int x = event.MouseInput.X;
            int y = event.MouseInput.Y;
            irr::core::position2di mouse_pos(x, y);
            irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
            if(root->getElementFromPoint(mouse_pos) != root)
                break;
            int pre_code = hovered_code;
            if(x >= 314 && x <= 794 && y >= 164 && y <= 435) {
                int lx = 10, px, py = (y - 164) / 68;
                hovered_pos = 1;
                if(deckManager.current_deck.main.size() > 40)
                    lx = (deckManager.current_deck.main.size() - 41) / 4 + 11;
                if(x >= 750)
                    px = lx - 1;
                else px = (x - 314) * (lx - 1) / 436;
                if(py*lx + px >= (int)deckManager.current_deck.main.size()) {
                    hovered_seq = -1;
                    hovered_code = 0;
                } else {
                    hovered_seq = py * lx + px;
                    hovered_code = deckManager.current_deck.main[hovered_seq]->first;
                }
            } else if(x >= 314 && x <= 794 && y >= 466 && y <= 530) {
                int lx = deckManager.current_deck.extra.size();
                hovered_pos = 2;
                if(lx < 10)
                    lx = 10;
                if(x >= 750)
                    hovered_seq = lx - 1;
                else hovered_seq = (x - 314) * (lx - 1) / 436;
                if(hovered_seq >= (int)deckManager.current_deck.extra.size()) {
                    hovered_seq = -1;
                    hovered_code = 0;
                } else {
                    hovered_code = deckManager.current_deck.extra[hovered_seq]->first;
                }
            } else if (x >= 314 && x <= 794 && y >= 564 && y <= 628) {
                int lx = deckManager.current_deck.side.size();
                hovered_pos = 3;
                if(lx < 10)
                    lx = 10;
                if(x >= 750)
                    hovered_seq = lx - 1;
                else hovered_seq = (x - 314) * (lx - 1) / 436;
                if(hovered_seq >= (int)deckManager.current_deck.side.size()) {
                    hovered_seq = -1;
                    hovered_code = 0;
                } else {
                    hovered_code = deckManager.current_deck.side[hovered_seq]->first;
                }
            } else if(x >= 810 && x <= 995 && y >= 165 && y <= 626) {
                hovered_pos = 4;
                hovered_seq = (y - 165) / 66;
                if(mainGame->scrFilter->getPos() + hovered_seq >= (int)results.size()) {
                    hovered_seq = -1;
                    hovered_code = 0;
                } else {
                    hovered_code = results[mainGame->scrFilter->getPos() + hovered_seq]->first;
                }
            } else {
                hovered_pos = 0;
                hovered_code = 0;
            }
            if(is_draging) {
                dragx = x;
                dragy = y;
            }
            if(!is_draging && pre_code != hovered_code) {
                if(hovered_code) {
                    mainGame->ShowCardInfo(hovered_code);
                }
                if(pre_code)
                    imageManager.RemoveTexture(pre_code);
            }
            break;
        }
        case irr::EMIE_MOUSE_WHEEL: {
            if(!mainGame->scrFilter->isVisible())
                break;
            if(event.MouseInput.Wheel < 0) {
                if(mainGame->scrFilter->getPos() < mainGame->scrFilter->getMax())
                    mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() + 1);
            } else {
                if(mainGame->scrFilter->getPos() > 0)
                    mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() - 1);
            }
            SEvent e = event;
            e.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
            mainGame->device->postEventFromUser(e);
            break;
        }
        default:
            break;
        }
        break;
    }
    case irr::EET_KEY_INPUT_EVENT: {
        switch(event.KeyInput.Key) {
        case irr::KEY_KEY_R: {
            if(!event.KeyInput.PressedDown && !mainGame->HasFocus(EGUIET_EDIT_BOX))
                mainGame->textFont->setTransparency(true);
            break;
        }
        case irr::KEY_ESCAPE: {
            if(!mainGame->HasFocus(EGUIET_EDIT_BOX))
                mainGame->device->minimizeWindow();
            break;
        }
        default:
            break;
        }
        break;
    }
    default:
        break;
    }
    return false;
}
Exemplo n.º 10
0
bool DeckBuilder::OnEvent(const irr::SEvent& event) {
	if(mainGame->dField.OnCommonEvent(event))
		return false;
	switch(event.EventType) {
	case irr::EET_GUI_EVENT: {
		s32 id = event.GUIEvent.Caller->getID();
		if(mainGame->wCategories->isVisible() && id != BUTTON_CATEGORY_OK)
			break;
		if(mainGame->wQuery->isVisible() && id != BUTTON_YES && id != BUTTON_NO)
			break;
		if(mainGame->wLinkMarks->isVisible() && id != BUTTON_MARKERS_OK)
			break;
		switch(event.GUIEvent.EventType) {
		case irr::gui::EGET_BUTTON_CLICKED: {
			soundManager.PlaySoundEffect(SOUND_BUTTON);
			switch(id) {
			case BUTTON_CLEAR_DECK: {
				mainGame->gMutex.Lock();
				mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->guiFont, dataManager.GetSysString(1339));
				mainGame->PopupElement(mainGame->wQuery);
				mainGame->gMutex.Unlock();
				prev_operation = id;
				break;
			}
			case BUTTON_SORT_DECK: {
				std::sort(deckManager.current_deck.main.begin(), deckManager.current_deck.main.end(), ClientCard::deck_sort_lv);
				std::sort(deckManager.current_deck.extra.begin(), deckManager.current_deck.extra.end(), ClientCard::deck_sort_lv);
				std::sort(deckManager.current_deck.side.begin(), deckManager.current_deck.side.end(), ClientCard::deck_sort_lv);
				break;
			}
			case BUTTON_SHUFFLE_DECK: {
				std::random_shuffle(deckManager.current_deck.main.begin(), deckManager.current_deck.main.end());
				break;
			}
			case BUTTON_SAVE_DECK: {
				int sel = mainGame->cbDBDecks->getSelected();
				if(sel >= 0 && deckManager.SaveDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) {
					mainGame->stACMessage->setText(dataManager.GetSysString(1335));
					mainGame->PopupElement(mainGame->wACMessage, 20);
					is_modified = false;
				}
				break;
			}
			case BUTTON_SAVE_DECK_AS: {
				const wchar_t* dname = mainGame->ebDeckname->getText();
				if(*dname == 0)
					break;
				int sel = -1;
				for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) {
					if(!wcscmp(dname, mainGame->cbDBDecks->getItem(i))) {
						sel = i;
						break;
					}
				}
				if(sel >= 0)
					mainGame->cbDBDecks->setSelected(sel);
				else {
					mainGame->cbDBDecks->addItem(dname);
					mainGame->cbDBDecks->setSelected(mainGame->cbDBDecks->getItemCount() - 1);
				}
				if(deckManager.SaveDeck(deckManager.current_deck, dname)) {
					mainGame->stACMessage->setText(dataManager.GetSysString(1335));
					mainGame->PopupElement(mainGame->wACMessage, 20);
					is_modified = false;
				}
				break;
			}
			case BUTTON_DELETE_DECK: {
				int sel = mainGame->cbDBDecks->getSelected();
				if(sel == -1)
					break;
				mainGame->gMutex.Lock();
				wchar_t textBuffer[256];
				myswprintf(textBuffer, L"%ls\n%ls", mainGame->cbDBDecks->getItem(sel), dataManager.GetSysString(1337));
				mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->guiFont, textBuffer);
				mainGame->PopupElement(mainGame->wQuery);
				mainGame->gMutex.Unlock();
				prev_operation = id;
				prev_sel = sel;
				break;
			}
			case BUTTON_LEAVE_GAME: {
				if(is_modified && !mainGame->chkIgnoreDeckChanges->isChecked()) {
					mainGame->gMutex.Lock();
					mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->guiFont, dataManager.GetSysString(1356));
					mainGame->PopupElement(mainGame->wQuery);
					mainGame->gMutex.Unlock();
					prev_operation = id;
					break;
				}
				Terminate();
				break;
			}
			case BUTTON_EFFECT_FILTER: {
				mainGame->PopupElement(mainGame->wCategories);
				break;
			}
			case BUTTON_START_FILTER: {
				StartFilter();
				if(!mainGame->gameConf.separate_clear_button)
					ClearFilter();
				break;
			}
			case BUTTON_CLEAR_FILTER: {
				ClearSearch();
				break;
			}
			case BUTTON_CATEGORY_OK: {
				filter_effect = 0;
				long long filter = 0x1;
				for(int i = 0; i < 32; ++i, filter <<= 1)
					if(mainGame->chkCategory[i]->isChecked())
						filter_effect |= filter;
				mainGame->btnEffectFilter->setPressed(filter_effect > 0);
				mainGame->HideElement(mainGame->wCategories);
				InstantSearch();
				break;
			}
			case BUTTON_SIDE_OK: {
				if(deckManager.current_deck.main.size() != pre_mainc || deckManager.current_deck.extra.size() != pre_extrac
				        || deckManager.current_deck.side.size() != pre_sidec) {
					soundManager.PlaySoundEffect(SOUND_INFO);
					mainGame->env->addMessageBox(L"", dataManager.GetSysString(1410));
					break;
				}
				mainGame->ClearCardInfo();
				char deckbuf[1024];
				char* pdeck = deckbuf;
				BufferIO::WriteInt32(pdeck, deckManager.current_deck.main.size() + deckManager.current_deck.extra.size());
				BufferIO::WriteInt32(pdeck, deckManager.current_deck.side.size());
				for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
					BufferIO::WriteInt32(pdeck, deckManager.current_deck.main[i]->first);
				for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
					BufferIO::WriteInt32(pdeck, deckManager.current_deck.extra[i]->first);
				for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
					BufferIO::WriteInt32(pdeck, deckManager.current_deck.side[i]->first);
				DuelClient::SendBufferToServer(CTOS_UPDATE_DECK, deckbuf, pdeck - deckbuf);
				break;
			}
			case BUTTON_SIDE_RELOAD: {
				deckManager.LoadDeck(mainGame->cbDeckSelect->getItem(mainGame->cbDeckSelect->getSelected()));
				break;
			}
			case BUTTON_MSG_OK: {
				mainGame->HideElement(mainGame->wMessage);
				mainGame->actionSignal.Set();
				break;
			}
			case BUTTON_YES: {
				mainGame->HideElement(mainGame->wQuery);
				if(!mainGame->is_building || mainGame->is_siding)
					break;
				if(prev_operation == BUTTON_CLEAR_DECK) {
					deckManager.current_deck.main.clear();
					deckManager.current_deck.extra.clear();
					deckManager.current_deck.side.clear();
				} else if(prev_operation == BUTTON_DELETE_DECK) {
					int sel = prev_sel;
					if(deckManager.DeleteDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) {
						mainGame->cbDBDecks->removeItem(sel);
						int count = mainGame->cbDBDecks->getItemCount();
						if(sel >= count)
							sel = count - 1;
						mainGame->cbDBDecks->setSelected(sel);
						if(sel != -1)
							deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel));
						mainGame->stACMessage->setText(dataManager.GetSysString(1338));
						mainGame->PopupElement(mainGame->wACMessage, 20);
						prev_deck = sel;
						is_modified = false;
					}
					prev_sel = -1;
				} else if(prev_operation == BUTTON_LEAVE_GAME) {
					Terminate();
				} else if(prev_operation == COMBOBOX_DBDECKS) {
					int sel = mainGame->cbDBDecks->getSelected();
					deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel));
					prev_deck = sel;
					is_modified = false;
				}
				prev_operation = 0;
				break;
			}
			case BUTTON_NO: {
				mainGame->HideElement(mainGame->wQuery);
				if (prev_operation == COMBOBOX_DBDECKS) {
					mainGame->cbDBDecks->setSelected(prev_deck);
				}
				prev_operation = 0;
				break;
			}
			case BUTTON_MARKS_FILTER: {
				mainGame->PopupElement(mainGame->wLinkMarks);
				break;
			}
			case BUTTON_MARKERS_OK: {
				filter_marks = 0;
				if (mainGame->btnMark[0]->isPressed())
					filter_marks |= 0100;
				if (mainGame->btnMark[1]->isPressed())
					filter_marks |= 0200;
				if (mainGame->btnMark[2]->isPressed())
					filter_marks |= 0400;
				if (mainGame->btnMark[3]->isPressed())
					filter_marks |= 0010;
				if (mainGame->btnMark[4]->isPressed())
					filter_marks |= 0040;
				if (mainGame->btnMark[5]->isPressed())
					filter_marks |= 0001;
				if (mainGame->btnMark[6]->isPressed())
					filter_marks |= 0002;
				if (mainGame->btnMark[7]->isPressed())
					filter_marks |= 0004;
				mainGame->HideElement(mainGame->wLinkMarks);
				mainGame->btnMarksFilter->setPressed(filter_marks > 0);
				InstantSearch();
				break;
			}
			}
			break;
		}
		case irr::gui::EGET_SCROLL_BAR_CHANGED: {
			switch(id) {
			case SCROLL_FILTER: {
				GetHoveredCard();
				break;
			}
			}
			break;
		}
		case irr::gui::EGET_EDITBOX_ENTER: {
			switch(id) {
			case EDITBOX_KEYWORD: {
				StartFilter();
				break;
			}
			}
			break;
		}
		case irr::gui::EGET_EDITBOX_CHANGED: {
			switch(id) {
			case EDITBOX_KEYWORD: {
				InstantSearch();
				break;
			}
			}
			break;
		}
		case irr::gui::EGET_COMBO_BOX_CHANGED: {
			switch(id) {
			case COMBOBOX_DBLFLIST: {
				filterList = deckManager._lfList[mainGame->cbDBLFList->getSelected()].content;
				break;
			}
			case COMBOBOX_DBDECKS: {
				if(is_modified && !mainGame->chkIgnoreDeckChanges->isChecked()) {
					mainGame->gMutex.Lock();
					mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->guiFont, dataManager.GetSysString(1356));
					mainGame->PopupElement(mainGame->wQuery);
					mainGame->gMutex.Unlock();
					prev_operation = id;
					break;
				}
				int sel = mainGame->cbDBDecks->getSelected();
				if(sel >= 0)
					deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel));
				prev_deck = sel;
				is_modified = false;
				break;
			}
			case COMBOBOX_MAINTYPE: {
				mainGame->cbCardType2->setSelected(0);
				mainGame->cbAttribute->setSelected(0);
				mainGame->cbRace->setSelected(0);
				mainGame->ebAttack->setText(L"");
				mainGame->ebDefense->setText(L"");
				mainGame->ebStar->setText(L"");
				mainGame->ebScale->setText(L"");
				switch(mainGame->cbCardType->getSelected()) {
				case 0: {
					mainGame->cbCardType2->setEnabled(false);
					mainGame->cbCardType2->setSelected(0);
					mainGame->cbRace->setEnabled(false);
					mainGame->cbAttribute->setEnabled(false);
					mainGame->ebAttack->setEnabled(false);
					mainGame->ebDefense->setEnabled(false);
					mainGame->ebStar->setEnabled(false);
					mainGame->ebScale->setEnabled(false);
					break;
				}
				case 1: {
					wchar_t normaltuner[32];
					wchar_t normalpen[32];
					wchar_t syntuner[32];
					mainGame->cbCardType2->setEnabled(true);
					mainGame->cbRace->setEnabled(true);
					mainGame->cbAttribute->setEnabled(true);
					mainGame->ebAttack->setEnabled(true);
					mainGame->ebDefense->setEnabled(true);
					mainGame->ebStar->setEnabled(true);
					mainGame->ebScale->setEnabled(true);
					mainGame->cbCardType2->clear();
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1080), 0);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1054), TYPE_MONSTER + TYPE_NORMAL);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1055), TYPE_MONSTER + TYPE_EFFECT);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1056), TYPE_MONSTER + TYPE_FUSION);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1057), TYPE_MONSTER + TYPE_RITUAL);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1063), TYPE_MONSTER + TYPE_SYNCHRO);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1073), TYPE_MONSTER + TYPE_XYZ);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1074), TYPE_MONSTER + TYPE_PENDULUM);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1076), TYPE_MONSTER + TYPE_LINK);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1075), TYPE_MONSTER + TYPE_SPSUMMON);
					myswprintf(normaltuner, L"%ls|%ls", dataManager.GetSysString(1054), dataManager.GetSysString(1062));
					mainGame->cbCardType2->addItem(normaltuner, TYPE_MONSTER + TYPE_NORMAL + TYPE_TUNER);
					myswprintf(normalpen, L"%ls|%ls", dataManager.GetSysString(1054), dataManager.GetSysString(1074));
					mainGame->cbCardType2->addItem(normalpen, TYPE_MONSTER + TYPE_NORMAL + TYPE_PENDULUM);
					myswprintf(syntuner, L"%ls|%ls", dataManager.GetSysString(1063), dataManager.GetSysString(1062));
					mainGame->cbCardType2->addItem(syntuner, TYPE_MONSTER + TYPE_SYNCHRO + TYPE_TUNER);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1062), TYPE_MONSTER + TYPE_TUNER);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1061), TYPE_MONSTER + TYPE_DUAL);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1060), TYPE_MONSTER + TYPE_UNION);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1059), TYPE_MONSTER + TYPE_SPIRIT);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1071), TYPE_MONSTER + TYPE_FLIP);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1072), TYPE_MONSTER + TYPE_TOON);
					break;
				}
				case 2: {
					mainGame->cbCardType2->setEnabled(true);
					mainGame->cbRace->setEnabled(false);
					mainGame->cbAttribute->setEnabled(false);
					mainGame->ebAttack->setEnabled(false);
					mainGame->ebDefense->setEnabled(false);
					mainGame->ebStar->setEnabled(false);
					mainGame->ebScale->setEnabled(false);
					mainGame->cbCardType2->clear();
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1080), 0);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1054), TYPE_SPELL);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1066), TYPE_SPELL + TYPE_QUICKPLAY);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1067), TYPE_SPELL + TYPE_CONTINUOUS);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1057), TYPE_SPELL + TYPE_RITUAL);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1068), TYPE_SPELL + TYPE_EQUIP);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1069), TYPE_SPELL + TYPE_FIELD);
					break;
				}
				case 3: {
					mainGame->cbCardType2->setEnabled(true);
					mainGame->cbRace->setEnabled(false);
					mainGame->cbAttribute->setEnabled(false);
					mainGame->ebAttack->setEnabled(false);
					mainGame->ebDefense->setEnabled(false);
					mainGame->ebStar->setEnabled(false);
					mainGame->ebScale->setEnabled(false);
					mainGame->cbCardType2->clear();
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1080), 0);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1054), TYPE_TRAP);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1067), TYPE_TRAP + TYPE_CONTINUOUS);
					mainGame->cbCardType2->addItem(dataManager.GetSysString(1070), TYPE_TRAP + TYPE_COUNTER);
					break;
				}
				}
				InstantSearch();
				break;
			}
			case COMBOBOX_SORTTYPE: {
				SortList();
				mainGame->env->setFocus(0);
				break;
			}
			case COMBOBOX_SECONDTYPE: {
				if (mainGame->cbCardType->getSelected() == 1) {
					if (mainGame->cbCardType2->getSelected() == 8) {
						mainGame->ebDefense->setEnabled(false);
						mainGame->ebDefense->setText(L"");
					} else {
						mainGame->ebDefense->setEnabled(true);
					}
				}
				InstantSearch();
				break;
			}
			case COMBOBOX_ATTRIBUTE:
			case COMBOBOX_RACE:
			case COMBOBOX_LIMIT:
				InstantSearch();
			}
		}
		default: break;
		}
		break;
	}
	case irr::EET_MOUSE_INPUT_EVENT: {
		switch(event.MouseInput.Event) {
		case irr::EMIE_LMOUSE_PRESSED_DOWN: {
			irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
			if(root->getElementFromPoint(mouse_pos) != root)
				break;
			if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible())
				break;
			if(hovered_pos == 0 || hovered_seq == -1)
				break;
			click_pos = hovered_pos;
			dragx = event.MouseInput.X;
			dragy = event.MouseInput.Y;
			draging_pointer = dataManager.GetCodePointer(hovered_code);
			if(draging_pointer == dataManager._datas.end())
				break;
			if(hovered_pos == 4) {
				if(!check_limit(draging_pointer))
					break;
			}
			is_starting_dragging = true;
			break;
		}
		case irr::EMIE_LMOUSE_LEFT_UP: {
			is_starting_dragging = false;
			if(!is_draging)
				break;
			soundManager.PlaySoundEffect(SOUND_CARD_DROP);
			bool pushed = false;
			if(hovered_pos == 1)
				pushed = push_main(draging_pointer, hovered_seq);
			else if(hovered_pos == 2)
				pushed = push_extra(draging_pointer, hovered_seq + is_lastcard);
			else if(hovered_pos == 3)
				pushed = push_side(draging_pointer, hovered_seq + is_lastcard);
			else if(hovered_pos == 4 && !mainGame->is_siding)
				pushed = true;
			if(!pushed) {
				if(click_pos == 1)
					push_main(draging_pointer);
				else if(click_pos == 2)
					push_extra(draging_pointer);
				else if(click_pos == 3)
					push_side(draging_pointer);
			}
			is_draging = false;
			break;
		}
		case irr::EMIE_RMOUSE_LEFT_UP: {
			if(mainGame->is_siding) {
				if(is_draging)
					break;
				if(hovered_pos == 0 || hovered_seq == -1)
					break;
				auto pointer = dataManager.GetCodePointer(hovered_code);
				if(pointer == dataManager._datas.end())
					break;
				soundManager.PlaySoundEffect(SOUND_CARD_DROP);
				if(hovered_pos == 1) {
					if(push_side(pointer))
						pop_main(hovered_seq);
				} else if(hovered_pos == 2) {
					if(push_side(pointer))
						pop_extra(hovered_seq);
				} else {
					if(push_extra(pointer) || push_main(pointer))
						pop_side(hovered_seq);
				}
				break;
			}
			if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible())
				break;
			if(!is_draging) {
				if(hovered_pos == 0 || hovered_seq == -1)
					break;
				soundManager.PlaySoundEffect(SOUND_CARD_DROP);
				if(hovered_pos == 1) {
					pop_main(hovered_seq);
				} else if(hovered_pos == 2) {
					pop_extra(hovered_seq);
				} else if(hovered_pos == 3) {
					pop_side(hovered_seq);
				} else {
					auto pointer = dataManager.GetCodePointer(hovered_code);
					if(pointer == dataManager._datas.end())
						break;
					if(!check_limit(pointer))
						break;
					if(!push_extra(pointer) && !push_main(pointer))
						push_side(pointer);
				}
			} else {
				soundManager.PlaySoundEffect(SOUND_CARD_PICK);
				if(click_pos == 1) {
					push_side(draging_pointer);
				} else if(click_pos == 2) {
					push_side(draging_pointer);
				} else if(click_pos == 3) {
					if(!push_extra(draging_pointer))
						push_main(draging_pointer);
				} else {
					push_side(draging_pointer);
				}
				is_draging = false;
			}
			break;
		}
		case irr::EMIE_MMOUSE_LEFT_UP: {
			if (mainGame->is_siding)
				break;
			if (mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible())
				break;
			if (hovered_pos == 0 || hovered_seq == -1)
				break;
			if (is_draging)
				break;
			auto pointer = dataManager.GetCodePointer(hovered_code);
			if(!check_limit(pointer))
				break;
			soundManager.PlaySoundEffect(SOUND_CARD_PICK);
			if (hovered_pos == 1) {
				if(!push_main(pointer))
					push_side(pointer);
			} else if (hovered_pos == 2) {
				if(!push_extra(pointer))
					push_side(pointer);
			} else if (hovered_pos == 3) {
				if(!push_side(pointer) && !push_extra(pointer))
					push_main(pointer);
			} else {
				if(!push_extra(pointer) && !push_main(pointer))
					push_side(pointer);
			}
			break;
		}
		case irr::EMIE_MOUSE_MOVED: {
			if(is_starting_dragging) {
				is_draging = true;
				soundManager.PlaySoundEffect(SOUND_CARD_PICK);
				if(hovered_pos == 1)
					pop_main(hovered_seq);
				else if(hovered_pos == 2)
					pop_extra(hovered_seq);
				else if(hovered_pos == 3)
					pop_side(hovered_seq);
				is_starting_dragging = false;
			}
			mouse_pos.set(event.MouseInput.X, event.MouseInput.Y);
			GetHoveredCard();
			break;
		}
		case irr::EMIE_MOUSE_WHEEL: {
			if(!mainGame->scrFilter->isVisible())
				break;
			if(mainGame->env->hasFocus(mainGame->scrFilter))
				break;
			irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
			if(root->getElementFromPoint(mouse_pos) != root)
				break;
			if(event.MouseInput.Wheel < 0) {
				if(mainGame->scrFilter->getPos() < mainGame->scrFilter->getMax())
					mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() + 1);
			} else {
				if(mainGame->scrFilter->getPos() > 0)
					mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() - 1);
			}
			GetHoveredCard();
			break;
		}
		default: break;
		}
		break;
	}
	case irr::EET_KEY_INPUT_EVENT: {
		break;
	}
	default: break;
	}
	return false;
}
Exemplo n.º 11
0
/*
 * SpyWindowProc - handle messages for the spy appl.
 */
LRESULT CALLBACK SpyWindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
{
    int         check;
    HWND        selwin;
    HWND        hinthwnd;
    WORD        cmdid = 0;
    RECT        area;
    BOOL        pausestate;
    BOOL        spyallstate;
    about_info  ai;
    HMENU       mh;

    switch ( msg ) {
    case WM_CREATE:
        GetClientRect( hwnd, &area );
        mh = GetMenu( hwnd );
        area.top = area.bottom - statusHite;
        StatusHdl = HintWndCreate( hwnd, &area, Instance, NULL );
        statusHite = SizeHintBar( StatusHdl );
        SetHintText( StatusHdl, (MenuItemHint *)menuHints,
                     sizeof( menuHints ) / sizeof( MenuItemHint ) );
        if( SpyMainWndInfo.show_hints ) {
            CheckMenuItem( mh, SPY_SHOW_HELP, MF_CHECKED | MF_BYCOMMAND );
        } else {
            hinthwnd = GetHintHwnd( StatusHdl );
            ShowWindow( hinthwnd, SW_HIDE );
        }
        CreateSpyBox( hwnd );
        SET_WNDINFO( hwnd, (LONG_PTR)SpyListBox );
        CreateSpyTool( hwnd );
        ShowSpyTool( SpyMainWndInfo.show_toolbar );
        if( SpyMainWndInfo.show_toolbar ) {
            CheckMenuItem( mh, SPY_SHOW_TOOLBAR, MF_CHECKED | MF_BYCOMMAND );
        }
        LogInit( hwnd, Instance, SpyLogTitle );
        CheckMenuItem( SpyMenu, SPY_AUTO_SCROLL, MF_CHECKED );
        EnableMenuItem( SpyMenu, SPY_ADD_WINDOW, MF_GRAYED );
        EnableMenuItem( SpyMenu, SPY_STOP, MF_GRAYED );
        EnableMenuItem( SpyMenu, SPY_OFFON, MF_GRAYED );
        if( SpyMainWndInfo.on_top ) {
            CheckMenuItem( mh, SPY_TOP, MF_CHECKED | MF_BYCOMMAND );
            SetWindowPos( hwnd, HWND_TOPMOST, 0, 0, 0, 0,
                          SWP_NOMOVE | SWP_NOSIZE );
        }
        break;
    case WM_TIMER:
        // See comment on setUpForPick
        KillTimer( hwnd, wparam );
        switch( wparam ) {
        case SPY_ADD_WINDOW:
            selwin = DoPickDialog( wparam );
            if( selwin != NULL ) {
                setMultipleWindows( hwnd );
                AddSelectedWindow( selwin );
            }
            break;
        case SPY_PEEK_WINDOW:
            DoPickDialog( wparam );
            break;
        case SPY_WINDOW:
            selwin = DoPickDialog( cmdid );
            if( selwin != NULL ) {
                ClearSelectedWindows();
                setSingleWindow( hwnd, selwin );
                enableSpy();
                AddSelectedWindow( selwin );
            }
            break;
        }
        break;
#ifdef __NT__
    case WM_COPYDATA:
        HandleMessage( (LPMSG)((COPYDATASTRUCT *)lparam)->lpData );
        break;
#endif
    case WM_MENUSELECT:
        hinthwnd = GetHintHwnd( StatusHdl );
        HintMenuSelect( StatusHdl, hwnd, wparam, lparam );
        break;
    case WM_COMMAND:
        cmdid = LOWORD( wparam );
        switch( cmdid ) {
        case SPY_SHOW_HELP:
            SpyMainWndInfo.show_hints = !SpyMainWndInfo.show_hints;
            mh = GetMenu( hwnd );
            hinthwnd = GetHintHwnd( StatusHdl );
            if( SpyMainWndInfo.show_hints ) {
                CheckMenuItem( mh, SPY_SHOW_HELP, MF_CHECKED | MF_BYCOMMAND );
                showHintBar( hwnd );
            } else {
                CheckMenuItem( mh, SPY_SHOW_HELP, MF_UNCHECKED | MF_BYCOMMAND );
                ShowWindow( hinthwnd, SW_HIDE );
            }
            GetClientRect( hwnd, &area );
            ResizeSpyBox( area.right - area.left, area.bottom - area.top );
            break;
        case SPY_SHOW_TOOLBAR:
            SpyMainWndInfo.show_toolbar = !SpyMainWndInfo.show_toolbar;
            mh = GetMenu( hwnd );
            if( SpyMainWndInfo.show_toolbar ) {
                CheckMenuItem( mh, SPY_SHOW_TOOLBAR, MF_CHECKED | MF_BYCOMMAND );
            } else {
                CheckMenuItem( mh, SPY_SHOW_TOOLBAR, MF_UNCHECKED | MF_BYCOMMAND );
            }
            ShowSpyTool( SpyMainWndInfo.show_toolbar );
            GetClientRect( hwnd, &area );
            ResizeSpyBox( area.right - area.left, area.bottom - area.top );
            break;
        case SPY_TOP:
            SpyMainWndInfo.on_top = !SpyMainWndInfo.on_top;
            mh = GetMenu( hwnd );
            if( SpyMainWndInfo.on_top ) {
                CheckMenuItem( mh, SPY_TOP, MF_CHECKED | MF_BYCOMMAND );
                SetWindowPos( hwnd, HWND_TOPMOST, 0, 0, 0, 0,
                              SWP_NOMOVE | SWP_NOSIZE );
            } else {
                CheckMenuItem( mh, SPY_TOP, MF_UNCHECKED | MF_BYCOMMAND );
                SetWindowPos( hwnd, HWND_NOTOPMOST, 0, 0, 0, 0,
                              SWP_NOMOVE | SWP_NOSIZE );
            }
            break;
        case SPY_MARK:
            pausestate = SpyMessagesPaused;
            SpyMessagesPaused = FALSE;              /* make sure marks are
                                                     * always added */
            ProcessMark( hwnd, Instance, markCallback );
            SpyMessagesPaused = pausestate;
            break;
        case SPY_SET_FONT:
            if( ChooseMonoFont( hwnd ) )  {
                statusHite = SizeHintBar( StatusHdl );
                ResetSpyListBox();
                showHintBar( hwnd );
            }
            break;
        case SPY_SAVE_AS:
            SaveListBox( SLB_SAVE_AS, SaveExtra, "", SpyName, hwnd, SpyListBox );
            break;
        case SPY_SAVE:
            SaveListBox( SLB_SAVE_TMP, SaveExtra, ".\\wspy.txt", SpyName, hwnd,
                         SpyListBox );
            break;
        case SPY_LOG:
            if( LogToggle() ) {
                CheckMenuItem( SpyMenu, SPY_LOG, MF_BYCOMMAND | MF_CHECKED );
            } else {
                CheckMenuItem( SpyMenu, SPY_LOG, MF_BYCOMMAND | MF_UNCHECKED );
                CheckMenuItem( SpyMenu, SPY_PAUSE_LOG, MF_BYCOMMAND | MF_UNCHECKED );
            }
            break;
        case SPY_CONFIG_LOG:
            LogConfigure();
            break;
        case SPY_EXIT:
            ClearFilter();
            DestroyWindow( hwnd );
            break;
        case SPY_LIST_BOX:
            switch( GET_WM_COMMAND_CMD( wparam, lparam ) ) {
            case LBN_ERRSPACE:
                ClearSpyBox();
                break;
            case LBN_DBLCLK:
                DoMessageSelDialog( hwnd );
                break;
            }
            break;
        case SPY_SHOW_SELECTED_WINDOWS:
            spyallstate = spyAll;
            DoShowSelectedDialog( hwnd, &spyallstate );
            if( spyallstate ) {
                doSpyAll( hwnd, spyallstate );
                if( spyAll ) {
                    SetSpyState( ON );
                }
                break;
            }
            if( WindowCount == 0 ) {
                SetWindowText( hwnd, SpyName );
                disableSpy();
                break;
            }

            if( WindowCount == 1 ) {
                setSingleWindow( hwnd, WindowList[0] );
            } else {
                setMultipleWindows( hwnd );
            }
            if( SpyState == NEITHER ) {
                enableSpy();
            }
            break;
        case SPY_HELP_CONTENTS:
            if( !WHtmlHelp( hwnd, "spy.chm", HELP_CONTENTS, 0 ) ) {
                WWinHelp( hwnd, "spy.hlp", HELP_CONTENTS, 0 );
            }
            break;
        case SPY_HELP_SRCH:
            if( !WHtmlHelp( hwnd, "spy.chm", HELP_PARTIALKEY, (HELP_DATA)"" ) ) {
                WWinHelp( hwnd, "spy.hlp", HELP_PARTIALKEY, (HELP_DATA)"" );
            }
            break;
        case SPY_HELP_ON_HELP:
            WWinHelp( hwnd, "winhelp.hlp", HELP_HELPONHELP, 0 );
            break;
        case SPY_ABOUT:
            ai.owner = hwnd;
            ai.inst = Instance;
            ai.name = AllocRCString( STR_ABOUT_NAME );
            ai.version = AllocRCString( STR_ABOUT_VERSION );
            ai.first_cr_year = "1993";
            ai.title = AllocRCString( STR_ABOUT_TITLE );
            DoAbout( &ai );
            FreeRCString( ai.name );
            FreeRCString( ai.version );
            FreeRCString( ai.title );
            break;
        case SPY_AUTO_SCROLL:
            if( SpyMessagesAutoScroll ) {
                SpyMessagesAutoScroll = FALSE;
                CheckMenuItem( SpyMenu, SPY_AUTO_SCROLL, MF_UNCHECKED );
            } else {
                SpyMessagesAutoScroll = TRUE;
                CheckMenuItem( SpyMenu, SPY_AUTO_SCROLL, MF_CHECKED );
            }
            break;
        case SPY_PAUSE_LOG:
            if( SpyLogPauseToggle() ) {
                CheckMenuItem( SpyMenu, SPY_PAUSE_LOG,
                               MF_BYCOMMAND | MF_CHECKED );
            } else {
                CheckMenuItem( SpyMenu, SPY_PAUSE_LOG,
                               MF_BYCOMMAND | MF_UNCHECKED );
            }
            break;
        case SPY_PAUSE_MESSAGES:
            SpyMessagePauseToggle();
            break;
        case SPY_CLEAR_MESSAGES:
            ClearSpyBox();
            ClearMessageCount();
            break;
        case SPY_MESSAGES_ASCFG:
            if( AutoSaveConfig ) {
                check = MF_UNCHECKED;
                AutoSaveConfig = FALSE;
            } else {
                AutoSaveConfig = TRUE;
                check = MF_CHECKED;
            }
            CheckMenuItem( SpyMenu, SPY_MESSAGES_ASCFG, check );
            break;
        case SPY_MESSAGES_SAVE:
            DoSaveSpyConfig();
            break;
        case SPY_MESSAGES_LOAD:
            DoLoadSpyConfig();
            break;
        case SPY_MESSAGES_WATCH:
        case SPY_MESSAGES_STOP:
            DoMessageDialog( hwnd, cmdid );
            break;
        case SPY_OFFON:
            if( SpyState != NEITHER ) {
                SetSpyState( !SpyState );
            }
            break;
        case SPY_STOP:
            disableSpy();
            ClearSelectedWindows();
            SetWindowText( hwnd, SpyName );
            break;
        case SPY_ANOTHER_WINDOW:
            if( SpyState == NEITHER || spyAll ) {
                SendMessage( hwnd, WM_COMMAND,
                             GET_WM_COMMAND_MPS( SPY_WINDOW, 0, 0 ) );
            } else {
                SendMessage( hwnd, WM_COMMAND,
                             GET_WM_COMMAND_MPS( SPY_ADD_WINDOW, 0, 0 ) );
            }
            break;
        case SPY_PEEK_WINDOW:
        case SPY_ADD_WINDOW:
        case SPY_WINDOW:
            setUpForPick( hwnd, cmdid );
            break;
        case SPY_ALL_WINDOWS:
            doSpyAll( hwnd, !spyAll );
            if( spyAll ) {
                SetSpyState( ON );
            }
            break;
        }
        break;
#ifdef __NT__
    case WM_NOTIFY:
        if( ((NMHDR *)lparam)->code == NM_DBLCLK &&
            ((NMHDR *)lparam)->idFrom == SPY_LIST_BOX ) {
            DoMessageSelDialog( hwnd );
        }
        break;
#endif
    case WM_CLOSE:
        PostMessage( hwnd, WM_COMMAND, GET_WM_COMMAND_MPS( SPY_EXIT, 0, 0 ) );
        break;
    case WM_ENDSESSION:
        if( wparam ) {
            SpyFini();
        }
        break;
    case WM_DESTROY:
        HintWndDestroy( StatusHdl );
        HintFini();
        StatusWndFini();
        DestroyMonoFonts();
        DestroySpyTool();
        WWinHelp( hwnd, "spy.hlp", HELP_QUIT, 0 );
        PostQuitMessage( 0 );
        break;
    case WM_MOVE:
        GetWindowRect( hwnd, &area );
        if( !SpyMainWndInfo.minimized ) {
            SpyMainWndInfo.last_xpos = SpyMainWndInfo.xpos;
            SpyMainWndInfo.last_ypos = SpyMainWndInfo.ypos;
            SpyMainWndInfo.xpos = area.left;
            SpyMainWndInfo.ypos = area.top;
        }
        break;
    case WM_SIZE:
        if( wparam != SIZE_MAXIMIZED && wparam != SIZE_MINIMIZED ) {
            GetWindowRect( hwnd, &area );
            SpyMainWndInfo.xsize = area.right - area.left;
            SpyMainWndInfo.ysize = area.bottom - area.top;
        } else {
            SpyMainWndInfo.xpos = SpyMainWndInfo.last_xpos;
            SpyMainWndInfo.ypos = SpyMainWndInfo.last_ypos;
        }
        SpyMainWndInfo.minimized = ( wparam == SIZE_MINIMIZED );
        GetClientRect( hwnd, &area );
        area.top = area.bottom - statusHite;
        hinthwnd = GetHintHwnd( StatusHdl );
        MoveWindow( hinthwnd, area.left, area.top,
                    area.right - area.left, statusHite, TRUE );
        ResizeSpyBox( LOWORD( lparam ), HIWORD( lparam ) );
        ResizeSpyTool( LOWORD( lparam ), HIWORD( lparam ) );
        showHintBar( hwnd );
        return( DefWindowProc( hwnd, msg, wparam, lparam ) );
        break;
#if defined( __NT__ )
    case WM_ERASEBKGND: {
        static RECT r;
        GetClientRect( hwnd, &r );
        FillRect( (HDC)wparam, &r, (HBRUSH)(COLOR_BTNFACE + 1) );
        return 1;
    }
#endif
    default:
        return( DefWindowProc( hwnd, msg, wparam, lparam ) );
    }
    return( 0 );

} /* SpyWindowProc */