comparison FrmMainWindow.cs @ 162:354c1d2ad086

Re #423: Support nested units in GTK UI * Add "add unit" context menu to tree * Add quick hacks to unit dialog to work with both nesting and direct category units
author IBBoard <dev@ibboard.co.uk>
date Sun, 05 Aug 2012 21:01:00 +0100
parents 89e2442bbb60
children 219340630150
comparison
equal deleted inserted replaced
161:4149dbdf042f 162:354c1d2ad086
238 238
239 private void FileLoadingFinished(List<FileLoadFailure> failures) 239 private void FileLoadingFinished(List<FileLoadFailure> failures)
240 { 240 {
241 foreach (FileLoadFailure failure in failures) 241 foreach (FileLoadFailure failure in failures)
242 { 242 {
243 logger.Warn("Failed to load " + failure.FailedFile.FullName + ": " + failure.Message); 243 logger.Warn("Failed to load " + failure.FailedFile.Name + ": " + failure.Message);
244 } 244 }
245 } 245 }
246 246
247 private void RenderCategoryTreeObjectName(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) 247 private void RenderCategoryTreeObjectName(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
248 { 248 {
329 model.AppendValues(iter, unit); 329 model.AppendValues(iter, unit);
330 TreePath path = model.GetPath(iter); 330 TreePath path = model.GetPath(iter);
331 treeUnits.ExpandToPath(path); 331 treeUnits.ExpandToPath(path);
332 } 332 }
333 } 333 }
334 } 334 } while (model.IterNext(ref iter));
335 while (model.IterNext(ref iter));
336 } 335 }
337 336
338 private void OnUnitRemoved(WarFoundryObject obj) 337 private void OnUnitRemoved(WarFoundryObject obj)
339 { 338 {
340 WFObjects.Unit unit = (WFObjects.Unit)obj; 339 WFObjects.Unit unit = (WFObjects.Unit)obj;
371 { 370 {
372 model.Remove(ref innerIter); 371 model.Remove(ref innerIter);
373 removed = true; 372 removed = true;
374 break; 373 break;
375 } 374 }
376 } 375 } while (model.IterNext(ref innerIter));
377 while (model.IterNext(ref innerIter));
378 376
379 if (removed) 377 if (removed)
380 { 378 {
381 break; 379 break;
382 } 380 }
383 } 381 }
384 } 382 }
385 } 383 } while (model.IterNext(ref iter));
386 while (model.IterNext(ref iter));
387 } 384 }
388 385
389 private void RemoveUnitTab(WFObjects.Unit unit) 386 private void RemoveUnitTab(WFObjects.Unit unit)
390 { 387 {
391 UnitDisplayWidget widget = DictionaryUtils.GetValue(unitToWidgetMap, unit); 388 UnitDisplayWidget widget = DictionaryUtils.GetValue(unitToWidgetMap, unit);
1175 } 1172 }
1176 1173
1177 protected virtual void OnTreeUnitsPopupMenu(object o, Gtk.PopupMenuArgs args) 1174 protected virtual void OnTreeUnitsPopupMenu(object o, Gtk.PopupMenuArgs args)
1178 { 1175 {
1179 object selectedItem = TreeUtils.GetSelectedItem(treeUnits); 1176 object selectedItem = TreeUtils.GetSelectedItem(treeUnits);
1180 1177 WFObjects.Unit theUnit = selectedItem as WFObjects.Unit;
1181 if (selectedItem is WFObjects.Unit) 1178
1179 if (theUnit != null)
1182 { 1180 {
1183 Menu menu = new Menu(); 1181 Menu menu = new Menu();
1184 ImageMenuItem delete = new ImageMenuItem(Translation.GetTranslation("menuRemoveUnit", "remove unit")); 1182 ImageMenuItem delete = new ImageMenuItem(Translation.GetTranslation("menuRemoveUnit", "remove unit"));
1185 delete.Image = new Gtk.Image(Stock.Delete, IconSize.Menu); 1183 delete.Image = new Gtk.Image(Stock.Delete, IconSize.Menu);
1186 delete.Activated += new EventHandler(OnUnitDelete); 1184 delete.Activated += new EventHandler(OnUnitDelete);
1187 delete.Data["unit"] = selectedItem; 1185 delete.Data["unit"] = theUnit;
1188 menu.Append(delete); 1186 menu.Append(delete);
1187
1188 if (theUnit.UnitType.ContainedUnitTypes.Length > 0)
1189 {
1190 ImageMenuItem addContained = new ImageMenuItem(Translation.GetTranslation("menuAddUnit", "add unit"));
1191 addContained.Image = new Gtk.Image(Stock.Add, IconSize.Menu);
1192 addContained.Activated += new EventHandler(OnSubUnitAdd);
1193 addContained.Data["unit"] = theUnit;
1194 menu.Append(addContained);
1195 }
1196
1189 menu.ShowAll(); 1197 menu.ShowAll();
1190 menu.Popup(); 1198 menu.Popup();
1191 } 1199 }
1192 } 1200 }
1193 1201
1194 private void OnUnitDelete(object o, EventArgs args) 1202 private void OnUnitDelete(object o, EventArgs args)
1195 { 1203 {
1196 RemoveUnitCommand command = new RemoveUnitCommand((WFObjects.Unit)((ImageMenuItem)o).Data["unit"]); 1204 RemoveUnitCommand command = new RemoveUnitCommand((WFObjects.Unit)((ImageMenuItem)o).Data["unit"]);
1197 commandStack.Execute(command); 1205 commandStack.Execute(command);
1206 }
1207
1208 void OnSubUnitAdd(object sender, EventArgs e)
1209 {
1210 WFObjects.Unit unit = (WFObjects.Unit)((ImageMenuItem)sender).Data["unit"];
1211 logger.DebugFormat("Show FrmNewUnit for contained units of {0}", unit.Name);
1212 FrmNewUnit newUnit = new FrmNewUnit(unit, WarFoundryCore.CurrentArmy);
1213 ResponseType response = (ResponseType)newUnit.Run();
1214 newUnit.Hide();
1215
1216 if (response == ResponseType.Ok)
1217 {
1218 CreateAndAddUnitCommand cmd = new CreateAndAddUnitCommand(newUnit.SelectedUnit, WarFoundryCore.CurrentArmy.GetCategory(newUnit.SelectedUnit.MainCategory), unit);
1219 commandStack.Execute(cmd);
1220 ShowUnitWidget(cmd.Unit);
1221 }
1222
1223 newUnit.Dispose();
1198 } 1224 }
1199 1225
1200 [GLib.ConnectBefore] 1226 [GLib.ConnectBefore]
1201 1227
1202 protected virtual void UnitTreeButtonPressed(object o, Gtk.ButtonPressEventArgs args) 1228 protected virtual void UnitTreeButtonPressed(object o, Gtk.ButtonPressEventArgs args)