/* H A N D L E C O N T E X T O P E N I N G */ /*---------------------------------------------------------------------------- * %%Function: HandleContextOpening * %%Qualified: AzLog.AzLogWindow.HandleContextOpening * %%Contact: rlittle * * This is going to get executed every time they go to open a context menu. * We want to know *where* they are invoking from, so we do some clever * hacker in HeaderSup.ColumnHeaderFromContextOpening(...) -- it figures out * (based on the client rects of the column header items) where they are * clicking and which column header is appropriate. * * NOTE: IF it locates a ColumnHeader and returns it to you, then * ColumnHeaderFromContextOpeneing CANCELS the context menu operation * from here from happening and assumes you are going to invoke the context * menu yourself (which is why we conly call m_ctxmHeader.Show() when * we get a columnheader back - this allows us to show our ContextMenu * for our Header columns instead of the context menu for the rest of the * listview) * * ALSO NOTE that we squirrel away the matched columnheader into the first * menu item in the context menu -- in our case, that's the * "Remove this column" menu item, so it follows that it needs to know * what "this" column is. (Other routings may choose to look here for this * information, so let's make sure to clear the Tag in times when we aren't * matched...) * ----------------------------------------------------------------------------*/ private void HandleContextOpening(object sender, CancelEventArgs e) { if (m_hs == null) { m_hs = new HeaderSupp(); } ColumnHeader ch = m_hs.ColumnHeaderFromContextOpening(m_lvLog, sender, e); if (ch != null) { m_ctxmHeader.Tag = ch; m_ctxmHeader.Items[0].Text = "Remove column " + ch.Text; m_ctxmHeader.Show(Control.MousePosition); } else { // we aren't in the column headers. now customize our context menu Point ptLocal = m_lvLog.PointToClient(Cursor.Position); ListViewItem lvi = m_lvLog.GetItemAt(ptLocal.X, ptLocal.Y); AzLogEntry azle = (AzLogEntry)lvi.Tag; ch = TCore.ListViewSupp.HeaderSupp.ColumnFromPoint(m_lvLog, ptLocal.X); AzLogViewSettings.AzLogViewColumn azlvc = m_azlvs.AzlvcFromName((string)ch.Tag); ContextMenuContext cmc = new ContextMenuContext(); cmc.azle = azle; cmc.lc = azlvc.DataColumn; m_ctxmListViewLog.Items[0].Tag = cmc; m_ctxmListViewLog.Items[0].Text = String.Format("Filter to this {0}", ch.Text); m_ctxmListViewLog.Items[1].Tag = cmc; m_ctxmListViewLog.Items[1].Text = String.Format("Filter out this {0}", ch.Text); m_ctxmListViewLog.Items[2].Tag = cmc; m_ctxmListViewLog.Items[2].Text = String.Format("Color this {0}", ch.Text); } }
/* S E T U P L I S T V I E W F O R L O G */ /*---------------------------------------------------------------------------- * %%Function: SetupListViewForView * %%Qualified: AzLog.AzLogWindow.SetupListViewForView * %%Contact: rlittle * * Initialize the view to match the given view * ----------------------------------------------------------------------------*/ private void SetupListViewForView(AzLogViewSettings azlvs) { int i; m_lvLog.BeginUpdate(); m_lvLog.Columns.Clear(); //for (i = m_lvLog.Columns.Count - 1; i >= 0; --i) //m_lvLog.Columns.RemoveAt(i); for (i = 0; i < azlvs.ColumnCount(); i++) { AzLogViewSettings.AzLogViewColumn azlvc = azlvs.Column(i); m_lvLog.Columns.Add(new ColumnHeader()); m_lvLog.Columns[i].Text = azlvc.Title; m_lvLog.Columns[i].Tag = azlvc.Name; m_lvLog.Columns[i].Width = azlvc.Width; } if (m_azlv != null) { m_azlv.BumpGeneration(); } m_lvLog.EndUpdate(); // m_lvLog.VirtualListSize = 0; }
/* N O T I F Y C O L U M N W I D T H C H A N G E D */ /*---------------------------------------------------------------------------- * %%Function: NotifyColumnWidthChanged * %%Qualified: AzLog.AzLogWindow.NotifyColumnWidthChanged * %%Contact: rlittle * * Just make note of the fact that the column widths changed * ----------------------------------------------------------------------------*/ private void NotifyColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e) { AzLogViewSettings.AzLogViewColumn azlvc = m_azlvs.AzlvcFromName((string)m_lvLog.Columns[e.ColumnIndex].Tag); if (azlvc != null) { if (azlvc.Width != m_lvLog.Columns[e.ColumnIndex].Width) { azlvc.Width = m_lvLog.Columns[e.ColumnIndex].Width; DirtyView(true); } } else if (m_lvLog.Columns[e.ColumnIndex].Tag != null) { throw (new Exception("no column found!")); } }
private HeaderSupp m_hs; // this is the guts of dealing with right clicking on the header region /* S E T U P C O N T E X T M E N U */ /*---------------------------------------------------------------------------- * %%Function: SetupContextMenu * %%Qualified: AzLog.AzLogWindow.SetupContextMenu * %%Contact: rlittle * * Setup the context menu for the listview. This creates the "add/remove * column" options. * ----------------------------------------------------------------------------*/ private void SetupContextMenu() { m_ctxmHeader.Items.Clear(); ToolStripMenuItem tsmi = new ToolStripMenuItem { Text = "Remove Column...", Tag = null, Checked = false }; tsmi.Click += HandleRemoveHeaderItem; m_ctxmHeader.Items.Add(tsmi); tsmi = new ToolStripMenuItem { Text = "Rename column...", Tag = null, Checked = false }; tsmi.Click += HandleRenameHeaderItem; m_ctxmHeader.Items.Add(tsmi); tsmi = new ToolStripMenuItem { Text = "-------------------", Enabled = false }; m_ctxmHeader.Items.Add(tsmi); foreach (AzLogViewSettings.DefaultColumnDef dcd in m_azlvs.DefaultColumns) { AzLogViewSettings.AzLogViewColumn azlvc = m_azlvs.AzlvcFromName(dcd.sName); bool fVisible = true; if (azlvc == null || !azlvc.Visible) { fVisible = false; } tsmi = new ToolStripMenuItem { Text = dcd.sName, Tag = dcd, Checked = fVisible }; tsmi.Click += HandleSelectHeaderItem; m_ctxmHeader.Items.Add(tsmi); } }