public static void Print <TKey>(ref int line, AttributeList list, DisplayableProperty <TKey, ReadableTuple <TKey> > generalProperties, int from, int to) { for (int i = from, size = Math.Min(to, list.Attributes.Count); i < size; i += 2) { DbAttribute att1 = list.Attributes[i]; DbAttribute att2 = (i + 1 < size) ? list.Attributes[i + 1] : null; InPairsLabel(att1, att2, ref line, generalProperties); line -= 2; InPairsPropety(att1, att2, ref line, generalProperties); } }
// TODO: The TabGenerator class works better than these custom generators public static GDbTab LoadSItemsTab <TKey>(GenericDatabase database, TabControl control, BaseDb gdb) { AbstractDb <TKey> db = gdb.To <TKey>(); AttributeList list = ServerItemProperties.AttributeList; GDbTabWrapper <TKey, ReadableTuple <TKey> > tab = new GDbTabWrapper <TKey, ReadableTuple <TKey> >(); GTabSettings <TKey, ReadableTuple <TKey> > settings = new GTabSettings <TKey, ReadableTuple <TKey> >(db); SInit(settings); settings.AttributeList = list; settings.AttId = list.PrimaryAttribute; settings.AttDisplay = ServerItemProperties.Name; DisplayableProperty <TKey, ReadableTuple <TKey> > generalProperties = new DisplayableProperty <TKey, ReadableTuple <TKey> >(); generalProperties.Spacing = 0; int line = 0; Print(ref line, new SpecifiedRangeIndexProvider(new int[] { ServerItemProperties.Id.Index, 1, ServerItemProperties.Type.Index, 1, ServerItemProperties.AegisName.Index, 2, ServerItemProperties.Buy.Index, 2, ServerItemProperties.Weight.Index, 16 }), generalProperties, list); generalProperties.AddCustomProperty(new CustomQueryViewerMobDroppedBy <TKey, ReadableTuple <TKey> >(line, 0, 1, 2)); generalProperties.SetRow(line, new GridLength(1, GridUnitType.Star)); Grid grid = PrintGrid(ref line, 3, 1, 2, new DefaultIndexProvider(ServerItemProperties.BindOnEquip.Index, 8), -1, 0, -1, 0, generalProperties, list); generalProperties.AddDeployAction(delegate { grid.Children[0].IsEnabled = false; grid.Children[1].IsEnabled = false; grid.Children[4].IsEnabled = false; grid.Children[5].IsEnabled = false; }); settings.DisplayablePropertyMaker = generalProperties; settings.ClientDatabase = database; settings.SearchEngine.SetAttributes( settings.AttId, settings.AttDisplay, ServerItemProperties.AegisName, null, ServerItemProperties.ApplicableJob, ServerItemProperties.Script, ServerItemProperties.OnEquipScript, ServerItemProperties.OnUnequipScript, ServerItemProperties.Type, ServerItemProperties.Gender ); settings.SearchEngine.SetSettings(ServerItemProperties.Id, true); settings.SearchEngine.SetSettings(ServerItemProperties.Name, true); settings.SearchEngine.SetSettings(ServerItemProperties.AegisName, true); settings.SearchEngine.SetupImageDataGetter = delegate(ReadableTuple <TKey> tuple) { tuple.GetImageData = delegate { try { var cDb = database.GetTable <int>(ServerDbs.ClientResourceDb); if (cDb == null) { return(null); } int id = tuple.GetKey <int>(); if (!cDb.ContainsKey(id)) { return(null); } byte[] data = database.MetaGrf.GetData(EncodingService.FromAnyToDisplayEncoding(@"data\texture\À¯ÀúÀÎÅÍÆäÀ̽º\item\" + cDb.GetTuple(id).GetValue <string>(ClientResourceAttributes.ResourceName) + ".bmp")); if (data != null) { GrfImage gimage = new GrfImage(ref data); gimage.MakePinkTransparent(); return(gimage.Cast <BitmapSource>()); } return(null); } catch { return(null); } }; }; settings.AddedCommands.Add(new GItemCommand <TKey, ReadableTuple <TKey> > { AllowMultipleSelection = true, DisplayName = "Copy entries to clipboard (rAthena)", ImagePath = "export.png", InsertIndex = 3, Shortcut = ApplicationShortcut.Copy, AddToCommandsStack = false, GenericCommand = delegate(List <ReadableTuple <TKey> > items) { StringBuilder builder = new StringBuilder(); DbWriterMethods.DbItemsWriterSub(builder, db, items.OrderBy(p => p.GetKey <TKey>()), ServerType.RAthena); Clipboard.SetText(builder.ToString()); } }); settings.AddedCommands.Add(new GItemCommand <TKey, ReadableTuple <TKey> > { AllowMultipleSelection = true, DisplayName = "Copy entries to clipboard (Hercules)", ImagePath = "export.png", InsertIndex = 4, Shortcut = ApplicationShortcut.Copy2, AddToCommandsStack = false, GenericCommand = delegate(List <ReadableTuple <TKey> > items) { StringBuilder builder = new StringBuilder(); DbWriterMethods.DbItemsWriterSub(builder, db, items, ServerType.Hercules); Clipboard.SetText(builder.ToString(), TextDataFormat.UnicodeText); } }); settings.Table = db.Table; tab.Initialize(settings); AddTagGeneratorTabChangedEvent(control, tab, settings, gdb); return(tab); }
public static Grid PrintGrid <TKey, TValue>(ref int line, int col, int rowSpan, int colSpan, IIndexProvider provider, AbstractProvider gridProvider, DisplayableProperty <TKey, TValue> generalProperties, AttributeList list) where TValue : Tuple { if (gridProvider is NullIndexProvider && provider is NullIndexProvider) { line++; return(null); } if (gridProvider is NullIndexProvider) { // No grid is being printed, but the provider is not null Print(ref line, provider, generalProperties, list); return(null); } if (gridProvider == null) { return(PrintGrid(ref line, col, rowSpan, colSpan, provider, -1, 0, -1, 0, generalProperties, list)); } return(PrintGrid(ref line, col, rowSpan, colSpan, provider, gridProvider[0], gridProvider[1], gridProvider[2], gridProvider[3], generalProperties, list)); }
public static Grid PrintGrid <TKey, TValue>(ref int line, int col, int rowSpan, int colSpan, IIndexProvider provider, int c0, int c1, int c2, int c3, DisplayableProperty <TKey, TValue> generalProperties, AttributeList list) where TValue : Tuple { Grid grid = generalProperties.AddGrid(line, col, rowSpan, colSpan); grid.ColumnDefinitions.Add(_getColumnDef(c0)); grid.ColumnDefinitions.Add(_getColumnDef(c1)); grid.ColumnDefinitions.Add(_getColumnDef(c2)); grid.ColumnDefinitions.Add(_getColumnDef(c3)); int lineOffset = -1; List <int> indexes = provider.GetIndexes(); for (int i = 0; i < indexes.Count; i += 2) { if (indexes[i] > -1 && indexes[i] < list.Attributes.Count && list.Attributes[indexes[i]].Visibility == VisibleState.Visible) { generalProperties.AddLabel(list.Attributes[indexes[i]], ++lineOffset, 0, false, grid); generalProperties.AddProperty(list.Attributes[indexes[i]], lineOffset, 1, grid); } if (i + 1 < indexes.Count) { if (indexes[i + 1] > -1 && indexes[i + 1] < list.Attributes.Count && list.Attributes[indexes[i + 1]].Visibility == VisibleState.Visible) { generalProperties.AddLabel(list.Attributes[indexes[i + 1]], lineOffset, 2, false, grid); generalProperties.AddProperty(list.Attributes[indexes[i + 1]], lineOffset, 3, grid); } } lineOffset++; } line++; return(grid); }
public static void Print <TKey, TValue>(ref int line, IIndexProvider provider, DisplayableProperty <TKey, TValue> generalProperties, AttributeList list) where TValue : Tuple { int lineOffset = -1; List <int> indexes = provider.GetIndexes(); for (int i = 0; i < indexes.Count; i += 2) { if (indexes[i] > -1 && indexes[i] < list.Attributes.Count && list.Attributes[indexes[i]].Visibility == VisibleState.Visible) { generalProperties.AddLabel(list.Attributes[indexes[i]], ++lineOffset, 0, false); generalProperties.AddProperty(list.Attributes[indexes[i]], lineOffset, 1); } if (i + 1 < indexes.Count) { if (indexes[i + 1] > -1 && indexes[i + 1] < list.Attributes.Count && list.Attributes[indexes[i + 1]].Visibility == VisibleState.Visible) { generalProperties.AddLabel(list.Attributes[indexes[i + 1]], lineOffset, 3, false); generalProperties.AddProperty(list.Attributes[indexes[i + 1]], lineOffset, 4); } } lineOffset++; line += 2; } }
public static void InPairsPropety <T>(DbAttribute att1, DbAttribute att2, ref int line, DisplayableProperty <T, ReadableTuple <T> > generalProperties) { if (att1 != null && att1.Visibility == VisibleState.Visible) { generalProperties.AddProperty(att1, line, 1); } if (att2 != null && att2.Visibility == VisibleState.Visible) { generalProperties.AddProperty(att2, line, 4); } line += 2; }
private void _generateGrid(ref int line, GenericDatabase database, TabControl control, DisplayableProperty <TKey, ReadableTuple <TKey> > generalProperties, BaseDb gdb) { if (gdb.LayoutIndexes != null) { AbstractProvider metaProvider = AbstractProvider.GetProvider(gdb.LayoutIndexes); if (metaProvider is GroupIndexProvider) { AbstractProvider gridProvider = AbstractProvider.GetProvider(gdb.GridIndexes); gridProvider.GroupAs = typeof(SpecifiedIndexProvider); bool col = false; foreach (IIndexProvider provider in metaProvider.Providers) { AbstractProvider gridLayout = gridProvider.Next <AbstractProvider>(); GTabsMaker.PrintGrid(ref line, (col = !col) ? 0 : 3, 1, 2, provider, gridLayout, generalProperties, gdb.AttributeList); if (col) { line--; } } } else { GTabsMaker.Print(ref line, metaProvider, generalProperties, gdb.AttributeList); } } else { GTabsMaker.Print(ref line, new SpecifiedRangeIndexProvider(new int[] { 0, gdb.AttributeList.Attributes.Count }), generalProperties, gdb.AttributeList); } }
private void _onPreviewGenerateGrid(ref int line, GenericDatabase database, TabControl control, DisplayableProperty <TKey, ReadableTuple <TKey> > generalProperties, BaseDb gdb) { }
private GDbTab _gDbTabMaker(GenericDatabase database, TabControl control, BaseDb gdb) { GTabSettings <TKey, ReadableTuple <TKey> > settings = new GTabSettings <TKey, ReadableTuple <TKey> >(gdb); GDbTabWrapper <TKey, ReadableTuple <TKey> > tab = new GDbTabWrapper <TKey, ReadableTuple <TKey> >(); Table <TKey, ReadableTuple <TKey> > table = gdb.To <TKey>().Table; settings.Table = table; settings.Control = control; InitStyle(tab, settings, gdb); InitAttributes(tab, settings, gdb); if (OnInitSettings != null) { OnInitSettings(tab, settings, gdb); } DisplayableProperty <TKey, ReadableTuple <TKey> > generalProperties = new DisplayableProperty <TKey, ReadableTuple <TKey> >(); generalProperties.Spacing = DefaultSpacing; control.SelectionChanged += delegate(object sender, SelectionChangedEventArgs e) { if (e == null || e.RemovedItems.Count <= 0 || e.RemovedItems[0] as TabItem == null || (e.AddedItems.Count > 0 && e.AddedItems[0] as TabItem == null)) { return; } if (e.AddedItems.Count <= 0) { return; } TabItem item = e.AddedItems[0] as TabItem; if (gdb.DbSource.AlternativeName != null) { if (WpfUtilities.IsTab(item, gdb.DbSource.Filename) || WpfUtilities.IsTab(item, gdb.DbSource.AlternativeName)) { if (generalProperties.OnTabVisible != null) { generalProperties.OnTabVisible(this); } if (OnPreviewTabVisualUpdate != null) { OnPreviewTabVisualUpdate(tab, settings, gdb); } if (OnTabVisualUpdate != null) { OnTabVisualUpdate(tab, settings, gdb); } } } else { if (WpfUtilities.IsTab(item, gdb.DbSource)) { if (generalProperties.OnTabVisible != null) { generalProperties.OnTabVisible(this); } if (OnPreviewTabVisualUpdate != null) { OnPreviewTabVisualUpdate(tab, settings, gdb); } if (OnTabVisualUpdate != null) { OnTabVisualUpdate(tab, settings, gdb); } } } }; database.Reloaded += delegate { if (OnDatabaseReloaded != null) { OnDatabaseReloaded(tab, settings, gdb); } }; int line = 0; if (OnPreviewGenerateGrid != null) { OnPreviewGenerateGrid(ref line, database, control, generalProperties, gdb); } if (GenerateGrid != null) { GenerateGrid(ref line, database, control, generalProperties, gdb); } if (OnGenerateGrid != null) { OnGenerateGrid(ref line, database, control, generalProperties, gdb); } settings.DisplayablePropertyMaker = generalProperties; settings.ClientDatabase = database; if (SetSettings != null) { SetSettings(tab, settings, gdb); } if (OnSetCustomCommands != null) { OnSetCustomCommands(tab, settings, gdb); } if (OnPreviewTabInitialize != null) { OnPreviewTabInitialize(tab, settings, gdb); } tab.Initialize(settings); return(tab); }