Ejemplo n.º 1
0
void
APRWindow::MessageReceived(BMessage *message)
{
	switch (message->what) {
		case kMsgUpdate:
			_UpdateButtons();
			break;

		case kMsgSetDefaults:
			fFontSettings->SetDefaults();
			fColorsView->SetDefaults();
			fLookAndFeelSettings->SetDefaults();
			fAntialiasingSettings->SetDefaults();

			_UpdateButtons();
			break;

		case kMsgRevert:
			fColorsView->Revert();
			fAntialiasingSettings->Revert();
			fLookAndFeelSettings->Revert();
			fFontSettings->Revert();

			_UpdateButtons();
			break;

		default:
			BWindow::MessageReceived(message);
			break;
	}
}
Ejemplo n.º 2
0
void CGroupStructDlg::OnButtonTo() 
{
	int nCount = m_lstAll.GetSelCount();
	if(nCount > 0)
	{
		CWaitCursor wait;
		LockWindowUpdate();

		nCount = m_lstAll.GetCount();

		for(int i = nCount - 1; i >= 0; i--)
		{
			if(m_lstAll.GetSel(i))
			{
				CString strName;
				m_lstAll.GetText(i, strName);

				CNamesMap::iterator it = m_mapDefSyms.find(strName);
				ASSERT(it != m_mapDefSyms.end());

				m_lstSel.AddString(strName);
				m_lstSel.SetSel(m_lstSel.FindStringExact(-1, strName));
				m_mapCurSyms[strName] = it->second;

				m_lstAll.DeleteString(i);
				m_mapDefSyms.erase(it);
			}
		}

		UnlockWindowUpdate();

		_UpdateButtons();
	}
}
Ejemplo n.º 3
0
void
TrackerSettingsWindow::Show()
{
	if (Lock()) {
		int32 itemCount = fSettingsTypeListView->CountItems();

		for (int32 i = 0; i < itemCount; i++) {
			_ViewAt(i)->RecordRevertSettings();
			_ViewAt(i)->ShowCurrentSettings();
		}

		fSettingsTypeListView->Invalidate();

		_UpdateButtons();

		Unlock();
	}

	if (IsHidden()) {
		// move to current workspace
		SetWorkspaces(B_CURRENT_WORKSPACE);
	}

	_inherited::Show();
}
Ejemplo n.º 4
0
void
BreakpointsView::WatchpointChanged(Watchpoint* watchpoint)
{
	fListView->WatchpointChanged(watchpoint);

	_UpdateButtons();
}
Ejemplo n.º 5
0
void CGroupStructDlg::OnRuleEdit() 
{
	int nIdx = m_cmbRule.GetCurSel();
	if(LB_ERR != nIdx)
	{
		long nRuleIdx = m_cmbRule.GetItemData(nIdx);
		
		ASSERT(nRuleIdx >= 0 && nRuleIdx < m_vecRules.size());
		CRuleDefinitionDlg dlg(NULL, m_vecRules, nRuleIdx);

		CRuleData& rdCur = m_vecRules[nRuleIdx];

		if(dlg.DoModal() == IDOK)
		{
			// change listbox string
			m_cmbRule.DeleteString(nIdx);
			m_cmbRule.AddString(rdCur.m_strName);
			nIdx = m_cmbRule.FindStringExact(-1, rdCur.m_strName);
			m_cmbRule.SetItemData(nIdx, nRuleIdx);
			m_cmbRule.SetCurSel(nIdx);

			_UpdateButtons();
		}
	}
}
Ejemplo n.º 6
0
nwxShiftSizer::nwxShiftSizer(
  wxScrolledWindow *pPeerWindow, 
  InwxShiftReceiver *pReceiver, 
  int nBorder,
  int nWaitInterval,
  bool bUseExternalTimer) : 
    wxBoxSizer(wxHORIZONTAL),
    m_pReceiver(pReceiver),
    m_pTimer(NULL),
    m_pPeerWindow(pPeerWindow),
    m_pCurrent(NULL),
    m_nTotalInterval(0),
    m_nWaitInterval(nWaitInterval),
    m_nBorder(nBorder),
    m_bUseExternalTimer(bUseExternalTimer)
{
  wxWindow *parent = pPeerWindow->GetParent();
  m_pButtonLeft = new nwxArrowBitmap(parent,this,true);
  m_pButtonRight = new nwxArrowBitmap(parent,this,false);
  _SetupLayout();
  if(!m_bUseExternalTimer)
  {
    m_pTimer = new wxTimer(m_pButtonLeft,wxID_ANY);
  }
  _UpdateButtons();
}
Ejemplo n.º 7
0
void
BreakpointsView::UserBreakpointChanged(UserBreakpoint* breakpoint)
{
	fListView->UserBreakpointChanged(breakpoint);

	_UpdateButtons();
}
Ejemplo n.º 8
0
bool nwxShiftSizer::_DoShift()
{
  bool bRtn = false;
  if(m_pCurrent != NULL)
  {
    bool bShift = nwxKeyState::Shift();
    if(m_pCurrent == m_pButtonLeft)
    {
      m_pReceiver->ShiftLeft(bShift);
      bRtn = m_pReceiver->CanShiftLeft();
    }
    else if(m_pCurrent == m_pButtonRight)
    {
      m_pReceiver->ShiftRight(bShift);
      bRtn = m_pReceiver->CanShiftRight();
    }
  }
  if(!bRtn)
  {
    EndShift();
  }
  else
  {
    _UpdateButtons();
  }
  return bRtn;
}
Ejemplo n.º 9
0
void
TrackerSettingsWindow::_HandleChangedContents()
{
	fSettingsTypeListView->Invalidate();
	_UpdateButtons();

	TrackerSettings().SaveSettings(false);
}
Ejemplo n.º 10
0
void nwxShiftSizer::EndShift()
{
  m_pCurrent = NULL;
  m_nTotalInterval = 0;
  if((m_pTimer != NULL) && m_pTimer->IsRunning())
  {
    m_pTimer->Stop();
  }
  _UpdateButtons();
}
void CDialogEditGridColours::OnButtonReverse(wxCommandEvent &)
{
  wxColour cBG = m_pGridColor->GetCellBackgroundColour(m_nRowColor,0);
  wxColour cFG = m_pGridColor->GetCellTextColour(m_nRowColor,0);
  m_pGridColor->SetCellBackgroundColour(m_nRowColor,0,cFG);
  m_pGridColor->SetCellTextColour(m_nRowColor,0,cBG);
  _UpdateColorsEdited();
  m_pGridColor->Refresh();
  _UpdateButtons(-1,m_nRowAttr);
  m_pGridColor->SetFocus();
}
void CDialogEditGridColours::OnButtonDefault(wxCommandEvent &)
{
  CParmOsirisGlobal pParm;
  CParmOsiris Parm(*pParm.Get());
  Parm.SetDefaultColours();
  _SetupGridColoursAttr(&Parm);
  _UpdateButtons(-1,-1);
  m_pGridColor->Refresh();
  m_pGridAttr->Refresh();
  m_pGridColor->SetFocus();
}
Ejemplo n.º 13
0
void
BreakpointsView::_SetSelection(BreakpointProxyList& proxies)
{
	for (int32 i = 0; i < fSelectedBreakpoints.CountItems(); i++)
		fSelectedBreakpoints.ItemAt(i)->ReleaseReference();

	fSelectedBreakpoints.MakeEmpty();

	for (int32 i = 0; i < proxies.CountItems(); i++) {
		BreakpointProxy* proxy = proxies.ItemAt(i);
		if (!fSelectedBreakpoints.AddItem(proxy))
			return;
		proxy->AcquireReference();
	}

	_UpdateButtons();
}
Ejemplo n.º 14
0
APRWindow::APRWindow(BRect frame)
	:
	BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Appearance"), B_TITLED_WINDOW,
		B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS
			| B_QUIT_ON_WINDOW_CLOSE, B_ALL_WORKSPACES)
{
	SetLayout(new BGroupLayout(B_HORIZONTAL));

	fDefaultsButton = new BButton("defaults", B_TRANSLATE("Defaults"),
		new BMessage(kMsgSetDefaults), B_WILL_DRAW);

	fRevertButton = new BButton("revert", B_TRANSLATE("Revert"),
		new BMessage(kMsgRevert), B_WILL_DRAW);

	BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL);

	fFontSettings = new FontView(B_TRANSLATE("Fonts"));

	fColorsView = new APRView(B_TRANSLATE("Colors"));

	fLookAndFeelSettings = new LookAndFeelSettingsView(
		B_TRANSLATE("Look and feel"));

	fAntialiasingSettings = new AntialiasingSettingsView(
		B_TRANSLATE("Antialiasing"));

	tabView->AddTab(fFontSettings);
	tabView->AddTab(fColorsView);
	tabView->AddTab(fLookAndFeelSettings);
	tabView->AddTab(fAntialiasingSettings);

	_UpdateButtons();

	AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
		.Add(tabView)
		.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
		.Add(BGroupLayoutBuilder(B_HORIZONTAL)
			.Add(fDefaultsButton)
			.Add(fRevertButton)
			.AddGlue()
		)
		.SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING,
			B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING)
	);
}
Ejemplo n.º 15
0
LRESULT CUIDialog::OnChangePage(WPARAM wParam, LPARAM lParam)
{
	int curPos = (int)wParam;
	int oldPos = (int)lParam;

	if(curPos == oldPos)
		return 0L;

	_TogglePage(oldPos, FALSE);
	_TogglePage(curPos, TRUE);
	m_nAtualPage = curPos;

	_UpdateButtons();
	_UpdatePanel();

	m_scroll.SetScrollPos(curPos);

	return 0L;
}
Ejemplo n.º 16
0
void
KeymapWindow::_SwitchShortcutKeys()
{
	uint32 leftCommand = fCurrentMap.Map().left_command_key;
	uint32 leftControl = fCurrentMap.Map().left_control_key;
	uint32 rightCommand = fCurrentMap.Map().right_command_key;
	uint32 rightControl = fCurrentMap.Map().right_control_key;

	// switch left side
	fCurrentMap.Map().left_command_key = leftControl;
	fCurrentMap.Map().left_control_key = leftCommand;

	// switch right side
	fCurrentMap.Map().right_command_key = rightControl;
	fCurrentMap.Map().right_control_key = rightCommand;

	fKeyboardLayoutView->SetKeymap(&fCurrentMap);
	_UpdateButtons();
}
Ejemplo n.º 17
0
bool nwxShiftSizer::Show(bool bShow)
{
  bool bRtn = false;
  if(m_pPeerWindow->IsShown() != bShow)
  {
    bRtn = true;
    m_pPeerWindow->Show(bShow);
    if(bShow)
    {
      _UpdateButtons();
    }
    else
    {
      _ShowButtons(false);
    }
    _SetupLayout(bShow);
    m_pPeerWindow->GetParent()->Layout();
  }
  return bRtn;
}
Ejemplo n.º 18
0
void
BreakpointsView::_Init()
{
	BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f)
		.Add(fListView = BreakpointListView::Create(fTeam, this, this))
		.AddGroup(B_HORIZONTAL, B_USE_SMALL_SPACING)
			.SetInsets(B_USE_SMALL_SPACING)
			.AddGlue()
			.Add(fRemoveBreakpointButton = new BButton("Remove"))
			.Add(fEditBreakpointButton = new BButton("Edit" B_UTF8_ELLIPSIS))
			.Add(fToggleBreakpointButton = new BButton("Toggle"))
		.End();

	fToggleBreakpointButton->SetMessage(new BMessage(MSG_ENABLE_BREAKPOINT));
	fRemoveBreakpointButton->SetMessage(new BMessage(MSG_CLEAR_BREAKPOINT));
	fEditBreakpointButton->SetMessage(
		new BMessage(MSG_SHOW_BREAKPOINT_EDIT_WINDOW));

	_UpdateButtons();
}
void CDialogEditGridColours::OnGrid(wxGridEvent &e)
{
  int nRowColor = m_nRowColor;
  int nRowAttr = m_nRowAttr;
  int nRow = e.GetRow();
  wxGrid *pGrid = (wxGrid *)e.GetEventObject();
  if(pGrid == m_pGridAttr)
  {
    nRowAttr = nRow;
  }
  else if(pGrid == m_pGridColor)
  {
    nRowColor = nRow;
  }
  else
  {
    nRowColor = -1;
    nRowAttr = -1;
    wxASSERT_MSG(0,_T("CDialogEditGridColours::OnGrid() unknown grid"));
  }
  _UpdateButtons(nRowColor,nRowAttr);
  e.Skip(true);
}
Ejemplo n.º 20
0
void nwxShiftSizer::UpdateSize()
{
  _UpdateButtons();
}
Ejemplo n.º 21
0
void CGroupStructDlg::OnListAllSelChange() 
{
	_UpdateButtons();
}
Ejemplo n.º 22
0
BOOL CGroupStructDlg::OnInitDialog() 
{
	CWaitCursor wait;

	CDialog::OnInitDialog();
	m_bInitNow = true;
/*
	m_edtName.SetFlat(TRUE);
	m_btnOK.SetFlatLook();
	m_btnCancel.SetFlatLook();
	m_btnRuleEdit.SetFlatLook();
	m_btnTo.SetFlatLook();
	m_btnFrom.SetFlatLook();
*/
	const CGroupData& gdCur = m_vecGroups[m_nCurGroupIdx];

	m_edtName.SetWindowText(gdCur.m_strName);
	m_edtName.SetLimitText(250);

	size_t i, nIdx;

	m_mapNames.clear();
	for(i = 1; i < m_vecGroups.size(); i++)
	{
		m_mapNames[m_vecGroups[i].m_strName] = m_vecGroups[i].m_nID;
	}

	if(gdCur.m_bIsNew)
	{
		SetWindowText(_T("New Group"));
	}
	
	for(i = 0; i < m_vecRules.size(); i++)
	{
		const CRuleData& rd = m_vecRules[i];
		m_cmbRule.AddString(rd.m_strName);
		nIdx = m_cmbRule.FindStringExact(-1, rd.m_strName);
		m_cmbRule.SetItemData(nIdx, i);
		if(rd.m_nID == gdCur.m_nRuleID && gdCur.m_nRuleID > 0 || gdCur.m_nRuleID == 0 && rd.m_bIsDefault)
		{
			m_cmbRule.SetCurSel(nIdx);
		}
	}

	m_mapCurSyms.clear();
	for(i = 0; i < gdCur.m_vecSymbols.size(); i++)
	{
		const CGroupSymbolData& gsd = gdCur.m_vecSymbols[i];
		m_lstSel.AddString(gsd.m_strName);
		m_mapCurSyms[gsd.m_strName] = i;
		//m_lstSel.SetItemData(m_lstSel.FindStringExact(gsd.m_strName), gsd.m_nID);
	}

	const CGroupData& gdDef = m_vecGroups[m_nDefGroupIdx];
	m_mapDefSyms.clear();
	for(i = 0; i < gdDef.m_vecSymbols.size(); i++)
	{
		const CGroupSymbolData& gsd = gdDef.m_vecSymbols[i];
		m_lstAll.AddString(gsd.m_strName);
		m_mapDefSyms[gsd.m_strName] = i;
		//m_lstAll.SetItemData(m_lstAll.FindStringExact(gsd.m_strName), gsd.m_nID);
	}

	if(m_lstAll.GetCount() > 0)
		m_lstAll.SetSel(0);

	if(m_lstSel.GetCount() > 0)
		m_lstSel.SetSel(0);

	_UpdateButtons();
	
	m_bInitNow = false;
	return TRUE;
}
CDialogEditGridColours::CDialogEditGridColours(mainFrame *parent) : 
  wxDialog(parent, wxID_ANY, _T("Edit Grid Colors"),
    wxDefaultPosition, wxDefaultSize,
    mainApp::DIALOG_STYLE & ~wxRESIZE_BORDER),
  m_nRowColor(-1),
  m_nRowAttr(-1),
  m_nInSelect(0),
  m_bModified(false)
{
  wxFont fnt;
  wxSize sz;
  wxSize sz2;
  int nw;
  int nw2;

  wxStaticText *pTextTop;
  wxStaticText *pTextAttributes;
  wxButton *pButtonReset;

  wxBoxSizer *pSizerAll;
  wxBoxSizer *pSizerColors;
  wxBoxSizer *pSizerAttributes;
  wxBoxSizer *pSizerWin;
  wxFlexGridSizer *pSizer2x2;
  wxSizer *pSizerButtons;

  pTextTop = new wxStaticText(
    this,wxID_ANY,_T(
    "Select a line in the lists below and use the\n"
    "buttons to modify its colors or attributes\n\nColors"));
  m_pGridColor = new CGridColorGrid(this,wxID_ANY);

    
  m_pTextFG = new wxStaticText(this,wxID_ANY,_T("Foreground Color: "));
  m_pButtonFG = _CreateButton(this,IDbuttonEditFGcolor);
  m_pTextBG = new wxStaticText(this,wxID_ANY,_T("Background Color: "));
  m_pButtonBG = _CreateButton(this,IDbuttonEditBGcolor);
  m_pButtonReverse = new wxButton(this,IDbuttonReverse,_T("Reverse"));

  pSizer2x2 = new wxFlexGridSizer(2,2,ID_BORDER,ID_BORDER);
  pSizer2x2->Add(m_pTextFG,0,wxALIGN_CENTER_VERTICAL);
  pSizer2x2->Add(m_pButtonFG,0,wxALIGN_CENTER_VERTICAL);
  pSizer2x2->Add(m_pTextBG,0,wxALIGN_CENTER_VERTICAL);
  pSizer2x2->Add(m_pButtonBG,0,wxALIGN_CENTER_VERTICAL);

  pSizerColors = new wxBoxSizer(wxHORIZONTAL);
  pSizerColors->Add(pSizer2x2,0,wxALIGN_CENTER_VERTICAL);
  pSizerColors->Add(m_pButtonReverse,0,
    wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxLEFT, ID_BORDER);

  pTextAttributes = new wxStaticText(this,wxID_ANY,_T("Attributes"));
  m_pGridAttr = new CGridAttrGrid(this,wxID_ANY);


  m_pToggleBold = new wxToggleButton(this,wxID_ANY,_T("Bold"));
  m_pToggleItalic = new wxToggleButton(this,wxID_ANY,_T("Italic"));
  m_pToggleReverse = new wxToggleButton(this,wxID_ANY,_T("Reverse"));
  fnt = m_pToggleItalic->GetFont();
  fnt.SetStyle(wxFONTSTYLE_ITALIC);
  m_pToggleItalic->SetFont(fnt);
  fnt.SetStyle(wxFONTSTYLE_NORMAL);
  fnt.SetWeight(wxFONTWEIGHT_BOLD);
  m_pToggleBold->SetFont(fnt);

  pButtonReset = new wxButton(
    this,IDbuttonResetDefault, _T("Reset Defaults"));

  {
    CParmOsirisGlobal pParm;
    _SetupGridColoursAttr(pParm.Get());
  }

  m_nRowColor = -1;
  m_nRowAttr = -1;
  _UpdateButtons(0,0);

  m_pGridColor->SetGridCursor(0,0);
  m_pGridAttr->SetGridCursor(0,0);
  m_pGridColor->AutoSizeColumns(true);
  m_pGridAttr->AutoSizeColumns(true);
  m_pGridColor->AutoSizeRows(true);
  m_pGridAttr->AutoSizeRows(true);


  // do full layout

  sz =  _ComputeGridSize(m_pGridColor);
  sz2 = _ComputeGridSize(m_pGridAttr);
  nw = sz.GetWidth();
  nw2 = sz2.GetWidth();
  if(nw2 > nw)
  {
    sz.SetWidth(nw2);
    m_pGridColor->SetColSize(0,m_pGridAttr->GetColSize(0));
  }
  else
  {
    sz2.SetWidth(nw);
    m_pGridAttr->SetColSize(0,m_pGridColor->GetColSize(0));
  }
  m_pGridColor->SetSize(sz);
  m_pGridAttr->SetSize(sz2);

  pSizerAttributes = new wxBoxSizer(wxHORIZONTAL);
  pSizerAttributes->Add(m_pToggleBold,0,0,0);
  pSizerAttributes->Add(m_pToggleItalic,0,wxLEFT, ID_BORDER);
  pSizerAttributes->Add(m_pToggleReverse,0,wxLEFT, ID_BORDER);

  pSizerAll = new wxBoxSizer(wxVERTICAL);
  pSizerAll->Add(pTextTop,0,wxALL | wxALIGN_LEFT, ID_BORDER);
  pSizerAll->Add(m_pGridColor,0,wxEXPAND | (wxALL ^ wxTOP),ID_BORDER);
  pSizerAll->Add(pSizerColors,0,
    wxALIGN_CENTER_HORIZONTAL | (wxALL ^ wxTOP), ID_BORDER);
  pSizerAll->Add(pTextAttributes,0,wxEXPAND | wxALL , ID_BORDER);
  pSizerAll->Add(m_pGridAttr,0,wxEXPAND | (wxALL ^ wxTOP), ID_BORDER);
  pSizerAll->Add(pSizerAttributes,0,wxALIGN_CENTER_HORIZONTAL | wxALL, ID_BORDER);
  pSizerAll->Add(pButtonReset,0,wxALIGN_CENTER_HORIZONTAL | (wxALL ^ wxBOTTOM),ID_BORDER);


  pSizerButtons = CreateButtonSizer(wxOK | wxCANCEL);
  pSizerWin = new wxBoxSizer(wxVERTICAL);
  pSizerWin->Add(pSizerAll,1,wxEXPAND,0);
  pSizerWin->Add(pSizerButtons,0,wxALIGN_CENTER_HORIZONTAL | wxALL, ID_BORDER);
  SetSizer(pSizerWin);
  pSizerWin->Layout();
  Fit();
  CentreOnParent();
  m_pGridColor->SetFocus();
}
Ejemplo n.º 24
0
void
KeymapWindow::MessageReceived(BMessage* message)
{
	switch (message->what) {
		case B_SIMPLE_DATA:
		case B_REFS_RECEIVED:
		{
			entry_ref ref;
			int32 i = 0;
			while (message->FindRef("refs", i++, &ref) == B_OK) {
				fCurrentMap.Load(ref);
				fAppliedMap = fCurrentMap;
			}
			fKeyboardLayoutView->SetKeymap(&fCurrentMap);
			fSystemListView->DeselectAll();
			fUserListView->DeselectAll();
			break;
		}

		case B_SAVE_REQUESTED:
		{
			entry_ref ref;
			const char* name;
			if (message->FindRef("directory", &ref) == B_OK
				&& message->FindString("name", &name) == B_OK) {
				BDirectory directory(&ref);
				BEntry entry(&directory, name);
				entry.GetRef(&ref);
				fCurrentMap.SetName(name);
				fCurrentMap.Save(ref);
				fAppliedMap = fCurrentMap;
				_FillUserMaps();
				fCurrentMapName = name;
				_SelectCurrentMap();
			}
			break;
		}

		case kMsgMenuFileOpen:
			fOpenPanel->Show();
			break;
		case kMsgMenuFileSaveAs:
			fSavePanel->Show();
			break;
		case kMsgShowModifierKeysWindow:
			be_app->PostMessage(kMsgShowModifierKeysWindow);
			break;

		case kChangeKeyboardLayout:
		{
			entry_ref ref;
			BPath path;
			if (message->FindRef("ref", &ref) == B_OK)
				path.SetTo(&ref);

			_SetKeyboardLayout(path.Path());
			break;
		}

		case kMsgSwitchShortcuts:
			_SwitchShortcutKeys();
			break;

		case kMsgMenuFontChanged:
		{
			BMenuItem* item = fFontMenu->FindMarked();
			if (item != NULL) {
				BFont font;
				font.SetFamilyAndStyle(item->Label(), NULL);
				fKeyboardLayoutView->SetBaseFont(font);
				fTextControl->TextView()->SetFontAndColor(&font);
			}
			break;
		}

		case kMsgSystemMapSelected:
		case kMsgUserMapSelected:
		{
			BListView* listView;
			BListView* otherListView;

			if (message->what == kMsgSystemMapSelected) {
				listView = fSystemListView;
				otherListView = fUserListView;
			} else {
				listView = fUserListView;
				otherListView = fSystemListView;
			}

			int32 index = listView->CurrentSelection();
			if (index < 0)
				break;

			// Deselect item in other BListView
			otherListView->DeselectAll();

			if (index == 0 && listView == fUserListView) {
				// we can safely ignore the "(Current)" item
				break;
			}

			KeymapListItem* item
				= static_cast<KeymapListItem*>(listView->ItemAt(index));
			if (item != NULL) {
				fCurrentMap.Load(item->EntryRef());
				fAppliedMap = fCurrentMap;
				fKeyboardLayoutView->SetKeymap(&fCurrentMap);
				_UseKeymap();
				_UpdateButtons();
			}
			break;
		}

		case kMsgDefaultKeymap:
			_DefaultKeymap();
			_UpdateButtons();
			break;

		case kMsgRevertKeymap:
			_RevertKeymap();
			_UpdateButtons();
			break;

		case kMsgUpdateNormalKeys:
		{
			uint32 keyCode;
			if (message->FindUInt32("keyCode", &keyCode) != B_OK)
				break;

			bool unset;
			if (message->FindBool("unset", &unset) == B_OK && unset) {
				fCurrentMap.SetKey(keyCode, modifiers(), 0, "", 0);
				_UpdateButtons();
				fKeyboardLayoutView->SetKeymap(&fCurrentMap);
			}
			break;
		}

		case kMsgUpdateModifierKeys:
		{
			uint32 keyCode;
			bool unset;
			if (message->FindBool("unset", &unset) != B_OK)
				unset = false;

			if (message->FindUInt32("left_shift_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_LEFT_SHIFT_KEY);
			}

			if (message->FindUInt32("right_shift_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_RIGHT_SHIFT_KEY);
			}

			if (message->FindUInt32("left_control_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_LEFT_CONTROL_KEY);
			}

			if (message->FindUInt32("right_control_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_RIGHT_CONTROL_KEY);
			}

			if (message->FindUInt32("left_option_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_LEFT_OPTION_KEY);
			}

			if (message->FindUInt32("right_option_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_RIGHT_OPTION_KEY);
			}

			if (message->FindUInt32("left_command_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_LEFT_COMMAND_KEY);
			}

			if (message->FindUInt32("right_command_key", &keyCode) == B_OK) {
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode,
					B_RIGHT_COMMAND_KEY);
			}

			if (message->FindUInt32("menu_key", &keyCode) == B_OK)
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode, B_MENU_KEY);

			if (message->FindUInt32("caps_key", &keyCode) == B_OK)
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode, B_CAPS_LOCK);

			if (message->FindUInt32("num_key", &keyCode) == B_OK)
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode, B_NUM_LOCK);

			if (message->FindUInt32("scroll_key", &keyCode) == B_OK)
				fCurrentMap.SetModifier(unset ? 0x00 : keyCode, B_SCROLL_LOCK);

			_UpdateButtons();
			fKeyboardLayoutView->SetKeymap(&fCurrentMap);
			break;
		}

		case kMsgKeymapUpdated:
			_UpdateButtons();
			fSystemListView->DeselectAll();
			fUserListView->Select(0L);
			break;

		case kMsgDeadKeyAcuteChanged:
		{
			BMenuItem* item = fAcuteMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyAcute, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyCircumflexChanged:
		{
			BMenuItem* item = fCircumflexMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyCircumflex, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyDiaeresisChanged:
		{
			BMenuItem* item = fDiaeresisMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyDiaeresis, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyGraveChanged:
		{
			BMenuItem* item = fGraveMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyGrave, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyTildeChanged:
		{
			BMenuItem* item = fTildeMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyTilde, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		default:
			BWindow::MessageReceived(message);
			break;
	}
}
Ejemplo n.º 25
0
KeymapWindow::KeymapWindow()
	:
	BWindow(BRect(80, 50, 880, 380), TR("Keymap"), B_TITLED_WINDOW,
		B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS)
{
	SetLayout(new BGroupLayout(B_VERTICAL));

	fKeyboardLayoutView = new KeyboardLayoutView("layout");
	fKeyboardLayoutView->SetKeymap(&fCurrentMap);

	fTextControl = new BTextControl(TR("Sample and clipboard:"), "", NULL);

	fSwitchShortcutsButton = new BButton("switch", "",
		new BMessage(kMsgSwitchShortcuts));

	fRevertButton = new BButton("revertButton", TR("Revert"),
		new BMessage(kMsgRevertKeymap));

	// controls pane
	AddChild(BGroupLayoutBuilder(B_VERTICAL)
		.Add(_CreateMenu())
		.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
			.Add(_CreateMapLists(), 0.25)
			.Add(BGroupLayoutBuilder(B_VERTICAL, 10)
				.Add(fKeyboardLayoutView)
				//.Add(new BStringView("text label", "Sample and clipboard:"))
				.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
					.Add(_CreateDeadKeyMenuField(), 0.0)
					.AddGlue()
					.Add(fSwitchShortcutsButton))
				.Add(fTextControl)
				.AddGlue(0.0)
				.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
					.AddGlue(0.0)
					.Add(fRevertButton)))
			.SetInsets(10, 10, 10, 10)));

	fKeyboardLayoutView->SetTarget(fTextControl->TextView());
	fTextControl->MakeFocus();

	// Make sure the user keymap directory exists
	BPath path;
	find_directory(B_USER_SETTINGS_DIRECTORY, &path);
	path.Append("Keymap");

	entry_ref ref;
	get_ref_for_path(path.Path(), &ref);

	BDirectory userKeymapsDir(&ref);
	if (userKeymapsDir.InitCheck() != B_OK)
		create_directory(path.Path(), S_IRWXU | S_IRWXG | S_IRWXO);

	BMessenger messenger(this);
	fOpenPanel = new BFilePanel(B_OPEN_PANEL, &messenger, &ref,
		B_FILE_NODE, false, NULL);
	fSavePanel = new BFilePanel(B_SAVE_PANEL, &messenger, &ref,
		B_FILE_NODE, false, NULL);

	BRect windowFrame;
	BString keyboardLayout;
	_LoadSettings(windowFrame, keyboardLayout);
	_SetKeyboardLayout(keyboardLayout.String());

	ResizeTo(windowFrame.Width(), windowFrame.Height());
	MoveTo(windowFrame.LeftTop());

	// TODO: this might be a bug in the interface kit, but scrolling to
	// selection does not correctly work unless the window is shown.
	Show();
	Lock();

	// Try and find the current map name in the two list views (if the name
	// was read at all)
	_SelectCurrentMap();

	KeymapListItem* current
		= static_cast<KeymapListItem*>(fUserListView->FirstItem());

	fCurrentMap.Load(current->EntryRef());
	fPreviousMap = fCurrentMap;
	fAppliedMap = fCurrentMap;
	fCurrentMap.SetTarget(this, new BMessage(kMsgKeymapUpdated));

	_UpdateButtons();

	_UpdateDeadKeyMenu();
	_UpdateSwitchShortcutButton();

	Unlock();
}
Ejemplo n.º 26
0
void
KeymapWindow::MessageReceived(BMessage* message)
{
	switch (message->what) {
		case B_SIMPLE_DATA:
		case B_REFS_RECEIVED:
		{
			entry_ref ref;
			int32 i = 0;
			while (message->FindRef("refs", i++, &ref) == B_OK) {
				fCurrentMap.Load(ref);
				fAppliedMap = fCurrentMap;
			}
			fKeyboardLayoutView->SetKeymap(&fCurrentMap);
			fSystemListView->DeselectAll();
			fUserListView->DeselectAll();
			break;
		}

		case B_SAVE_REQUESTED:
		{
			entry_ref ref;
			const char *name;
			if (message->FindRef("directory", &ref) == B_OK
				&& message->FindString("name", &name) == B_OK) {
				BDirectory directory(&ref);
				BEntry entry(&directory, name);
				entry.GetRef(&ref);
				fCurrentMap.SetName(name);
				fCurrentMap.Save(ref);
				fAppliedMap = fCurrentMap;
				_FillUserMaps();
				fCurrentMapName = name;
				_SelectCurrentMap();
			}
			break;
		}

		case kMsgMenuFileOpen:
			fOpenPanel->Show();
			break;
		case kMsgMenuFileSaveAs:
			fSavePanel->Show();
			break;

		case kChangeKeyboardLayout:
		{
			entry_ref ref;
			BPath path;
			if (message->FindRef("ref", &ref) == B_OK)
				path.SetTo(&ref);

			_SetKeyboardLayout(path.Path());
			break;
		}

		case kMsgSwitchShortcuts:
			_SwitchShortcutKeys();
			break;

		case kMsgMenuFontChanged:
		{
			BMenuItem *item = fFontMenu->FindMarked();
			if (item != NULL) {
				BFont font;
				font.SetFamilyAndStyle(item->Label(), NULL);
				fKeyboardLayoutView->SetFont(font);
				fTextControl->TextView()->SetFontAndColor(&font);
			}
			break;
		}

		case kMsgSystemMapSelected:
		case kMsgUserMapSelected:
		{
			BListView* listView;
			BListView* otherListView;

			if (message->what == kMsgSystemMapSelected) {
				listView = fSystemListView;
				otherListView = fUserListView;
			} else {
				listView = fUserListView;
				otherListView = fSystemListView;
			}

			int32 index = listView->CurrentSelection();
			if (index < 0)
				break;

			// Deselect item in other BListView
			otherListView->DeselectAll();

			if (index == 0 && listView == fUserListView) {
				// we can safely ignore the "(Current)" item
				break;
			}

			KeymapListItem* item
				= static_cast<KeymapListItem*>(listView->ItemAt(index));
			if (item != NULL) {
				fCurrentMap.Load(item->EntryRef());
				fAppliedMap = fCurrentMap;
				fKeyboardLayoutView->SetKeymap(&fCurrentMap);
				_UseKeymap();
				_UpdateButtons();
			}
			break;
		}

		case kMsgRevertKeymap:
			_RevertKeymap();
			_UpdateButtons();
			break;

		case kMsgKeymapUpdated:
			_UpdateButtons();
			fSystemListView->DeselectAll();
			fUserListView->Select(0L);
			break;

		case kMsgDeadKeyAcuteChanged:
		{
			BMenuItem* item = fAcuteMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyAcute, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyCircumflexChanged:
		{
			BMenuItem* item = fCircumflexMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyCircumflex, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyDiaeresisChanged:
		{
			BMenuItem* item = fDiaeresisMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyDiaeresis, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyGraveChanged:
		{
			BMenuItem* item = fGraveMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyGrave, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		case kMsgDeadKeyTildeChanged:
		{
			BMenuItem* item = fTildeMenu->FindMarked();
			if (item != NULL) {
				const char* trigger = item->Label();
				if (strcmp(trigger, kDeadKeyTriggerNone) == 0)
					trigger = NULL;
				fCurrentMap.SetDeadKeyTrigger(kDeadKeyTilde, trigger);
				fKeyboardLayoutView->Invalidate();
			}
			break;
		}

		default:
			BWindow::MessageReceived(message);
			break;
	}
}