//----------------------------------------------------------------------------- // Purpose: Overrides build mode so it edits the sub panel //----------------------------------------------------------------------------- void ToolWindow::ActivateBuildMode() { // no subpanel, no build mode EditablePanel *panel = dynamic_cast<EditablePanel *>(GetActivePage()); if (!panel) return; panel->ActivateBuildMode(); }
//----------------------------------------------------------------------------- // Purpose: Passes build mode activation down into the pages //----------------------------------------------------------------------------- void CServerBrowserDialog::ActivateBuildMode() { // no subpanel, no build mode EditablePanel *panel = dynamic_cast<EditablePanel *>(m_pTabPanel->GetActivePage()); if (!panel) return; panel->ActivateBuildMode(); }
//----------------------------------------------------------------------------- // Purpose: Overrides build mode so it edits the sub panel //----------------------------------------------------------------------------- void PropertyDialog::ActivateBuildMode() { // no subpanel, no build mode EditablePanel *panel = dynamic_cast<EditablePanel *>(GetActivePage()); if (!panel) return; panel->ActivateBuildMode(); }
//----------------------------------------------------------------------------- // Purpose: allow the build mode editor to edit the current sub panel //----------------------------------------------------------------------------- void CGamePanelInfo::ActivateBuildMode() { // BaseClass::ActivateBuildMode(); // return; // no subpanel, no build mode EditablePanel *pg = dynamic_cast<EditablePanel *>(m_pDetailsSheet->GetActivePage()); if (pg) { pg->ActivateBuildMode(); } }
//----------------------------------------------------------------------------- // Purpose: Handle key presses, through tabs. //----------------------------------------------------------------------------- void PropertySheet::OnKeyCodeTyped(KeyCode code) { bool shift = (input()->IsKeyDown(KEY_LSHIFT) || input()->IsKeyDown(KEY_RSHIFT)); bool ctrl = (input()->IsKeyDown(KEY_LCONTROL) || input()->IsKeyDown(KEY_RCONTROL)); bool alt = (input()->IsKeyDown(KEY_LALT) || input()->IsKeyDown(KEY_RALT)); if ( ctrl && shift && alt && code == KEY_B) { // enable build mode EditablePanel *ep = dynamic_cast< EditablePanel * >( GetActivePage() ); if ( ep ) { ep->ActivateBuildMode(); return; } } if ( IsKBNavigationEnabled() ) { switch (code) { // for now left and right arrows just open or close submenus if they are there. case KEY_RIGHT: { ChangeActiveTab(_activeTabIndex+1); break; } case KEY_LEFT: { ChangeActiveTab(_activeTabIndex-1); break; } default: BaseClass::OnKeyCodeTyped(code); break; } } else { BaseClass::OnKeyCodeTyped(code); } }
//----------------------------------------------------------------------------- // Purpose: Checks to see if any text has changed //----------------------------------------------------------------------------- void BuildModeDialog::OnTextChanged( Panel *panel ) { if (panel == m_pFileSelectionCombo) { // reload file if it's changed char newFile[512]; m_pFileSelectionCombo->GetText(newFile, sizeof(newFile)); if (stricmp(newFile, m_pBuildGroup->GetResourceName()) != 0) { // file has changed, reload SetActiveControl(NULL); m_pBuildGroup->ChangeControlSettingsFile(newFile); } return; } if (panel == m_pAddNewControlCombo) { char buf[40]; m_pAddNewControlCombo->GetText(buf, 40); if (stricmp(buf, "None") != 0) { OnNewControl(buf); // reset box back to None m_pAddNewControlCombo->ActivateItemByRow( 0 ); } } if ( panel == m_pEditableChildren ) { KeyValues *kv = m_pEditableChildren->GetActiveItemUserData(); if ( kv ) { EditablePanel *ep = reinterpret_cast< EditablePanel * >( kv->GetPtr( "ptr" ) ); if ( ep ) { ep->ActivateBuildMode(); } } } if ( panel == m_pEditableParents ) { KeyValues *kv = m_pEditableParents->GetActiveItemUserData(); if ( kv ) { EditablePanel *ep = reinterpret_cast< EditablePanel * >( kv->GetPtr( "ptr" ) ); if ( ep ) { ep->ActivateBuildMode(); } } } if (m_pCurrentPanel && m_pCurrentPanel->IsBuildModeEditable()) { m_pApplyButton->SetEnabled(true); } if (_autoUpdate) { ApplyDataToControls(); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool BuildGroup::KeyCodeTyped(KeyCode code, Panel *panel) { if ( !m_hBuildDialog.Get() ) { if ( panel->GetParent() ) { EditablePanel *ep = dynamic_cast< EditablePanel * >( panel->GetParent() ); if ( ep ) { BuildGroup *bg = ep->GetBuildGroup(); if ( bg && bg != this ) { bg->KeyCodeTyped( code, panel ); } } } return false; } Assert(panel); int dx=0; int dy=0; bool shift = ( input()->IsKeyDown(KEY_LSHIFT) || input()->IsKeyDown(KEY_RSHIFT) ); bool ctrl = ( input()->IsKeyDown(KEY_LCONTROL) || input()->IsKeyDown(KEY_RCONTROL) ); bool alt = (input()->IsKeyDown(KEY_LALT) || input()->IsKeyDown(KEY_RALT)); if ( ctrl && shift && alt && code == KEY_B) { // enable build mode EditablePanel *ep = dynamic_cast< EditablePanel * >( panel ); if ( ep ) { ep->ActivateBuildMode(); } return true; } switch (code) { case KEY_LEFT: { dx-=_snapX; break; } case KEY_RIGHT: { dx+=_snapX; break; } case KEY_UP: { dy-=_snapY; break; } case KEY_DOWN: { dy+=_snapY; break; } case KEY_DELETE: { // delete the panel we have selected ivgui()->PostMessage (m_hBuildDialog->GetVPanel(), new KeyValues ("DeletePanel"), NULL); break; } } if (ctrl) { switch (code) { case KEY_Z: { ivgui()->PostMessage(m_hBuildDialog->GetVPanel(), new KeyValues("Undo"), NULL); break; } case KEY_C: { ivgui()->PostMessage(m_hBuildDialog->GetVPanel(), new KeyValues("Copy"), NULL); break; } case KEY_V: { ivgui()->PostMessage(m_hBuildDialog->GetVPanel(), new KeyValues("Paste"), NULL); break; } } } if(dx||dy) { //TODO: make this stuff actually snap int x,y,wide,tall; panel->GetBounds(x,y,wide,tall); if(shift) { panel->SetSize(wide+dx,tall+dy); } else { panel->SetPos(x+dx,y+dy); } ApplySnap(panel); panel->Repaint(); if (panel->GetVParent() != NULL) { panel->PostMessage(panel->GetVParent(), new KeyValues("Repaint")); } // update the build dialog if (m_hBuildDialog) { // post that it's active KeyValues *keyval = new KeyValues("SetActiveControl"); keyval->SetPtr("PanelPtr", GetCurrentPanel()); ivgui()->PostMessage(m_hBuildDialog->GetVPanel(), keyval, NULL); // post that it's been changed ivgui()->PostMessage(m_hBuildDialog->GetVPanel(), new KeyValues("PanelMoved"), NULL); } } // If holding key while dragging, simulate moving cursor so shift/ctrl key changes take effect if ( _dragging && panel != GetContextPanel() ) { int x, y; input()->GetCursorPos( x, y ); CursorMoved( x, y, panel ); } return true; }