Mercurial > repos > IBBoard.WarFoundry.GUI.QtSharp
comparison MainWindow.cs @ 28:5ee15def17e7
Re #244: Create "New Unit" dialog in Qt# app
* Add handler to feed back event (Qt widgets and events can't contain enough data)
* Add actions to toolbar as army changes
* Add initial "new unit" dialog by stripping down "new army" dialog
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 31 Jul 2010 20:32:01 +0000 |
parents | 55d4f16c982b |
children | 246237c88b9b |
comparison
equal
deleted
inserted
replaced
27:7eaa8a1715e2 | 28:5ee15def17e7 |
---|---|
12 using IBBoard.WarFoundry.API; | 12 using IBBoard.WarFoundry.API; |
13 using IBBoard.WarFoundry.API.Exporters; | 13 using IBBoard.WarFoundry.API.Exporters; |
14 using IBBoard.WarFoundry.API.Factories; | 14 using IBBoard.WarFoundry.API.Factories; |
15 using IBBoard.WarFoundry.API.Objects; | 15 using IBBoard.WarFoundry.API.Objects; |
16 using IBBoard.WarFoundry.API.Savers; | 16 using IBBoard.WarFoundry.API.Savers; |
17 using IBBoard.WarFoundry.GUI.QtSharp.Handler; | |
17 | 18 |
18 namespace IBBoard.WarFoundry.GUI.QtSharp | 19 namespace IBBoard.WarFoundry.GUI.QtSharp |
19 { | 20 { |
20 public class MainWindow : QMainWindow | 21 public class MainWindow : QMainWindow |
21 { | 22 { |
26 private string loadedFilePath; | 27 private string loadedFilePath; |
27 private CommandStack commandStack; | 28 private CommandStack commandStack; |
28 private QFileDialog saveArmyDialog; | 29 private QFileDialog saveArmyDialog; |
29 private QFileDialog openArmyDialog; | 30 private QFileDialog openArmyDialog; |
30 private Preferences preferences; | 31 private Preferences preferences; |
32 private QAction[] categoryActions; | |
31 | 33 |
32 public MainWindow () | 34 public MainWindow () |
33 { | 35 { |
34 layout = new Ui_MainWindowLayout(); | 36 layout = new Ui_MainWindowLayout(); |
35 layout.SetupUi(this); | 37 layout.SetupUi(this); |
58 openArmyDialog.SetDirectory(new QDir(Environment.GetFolderPath(Environment.SpecialFolder.Personal))); | 60 openArmyDialog.SetDirectory(new QDir(Environment.GetFolderPath(Environment.SpecialFolder.Personal))); |
59 SetUpActionIcons(); | 61 SetUpActionIcons(); |
60 ConnectMenuActions(); | 62 ConnectMenuActions(); |
61 SetUpToolbar(); | 63 SetUpToolbar(); |
62 layout.unitTabs.Clear(); | 64 layout.unitTabs.Clear(); |
65 categoryActions = new QAction[0]; | |
63 WarFoundryCore.ArmyChanged+= HandleWarFoundryCoreArmyChanged; | 66 WarFoundryCore.ArmyChanged+= HandleWarFoundryCoreArmyChanged; |
64 CommandStack.CommandStackUpdated+= HandleCommandStackCommandStackUpdated; | 67 CommandStack.CommandStackUpdated+= HandleCommandStackCommandStackUpdated; |
65 } | 68 } |
66 | 69 |
67 protected override void CloseEvent(QCloseEvent arg1) | 70 protected override void CloseEvent(QCloseEvent arg1) |
143 private void HandleWarFoundryCoreArmyChanged(Army oldValue, Army newValue) | 146 private void HandleWarFoundryCoreArmyChanged(Army oldValue, Army newValue) |
144 { | 147 { |
145 CommandStack.Reset(); | 148 CommandStack.Reset(); |
146 loadedFilePath = null; | 149 loadedFilePath = null; |
147 layout.actionSaveArmy.Enabled = false; | 150 layout.actionSaveArmy.Enabled = false; |
151 SetCategoryButtons(newValue == null ? new Category[0] : newValue.Race.Categories); | |
148 SetPointsPanelText(); | 152 SetPointsPanelText(); |
149 SetAppTitle(); | 153 SetAppTitle(); |
150 } | 154 } |
151 | 155 |
152 private void SetPointsPanelText () | 156 private void SetPointsPanelText () |
471 } | 475 } |
472 | 476 |
473 layout.armyTree.SetModel(treeModel); | 477 layout.armyTree.SetModel(treeModel); |
474 } | 478 } |
475 | 479 |
480 private QVariant WrapObject(WarFoundryObject obj) | |
481 { | |
482 return QVariant.FromValue<WarFoundryObject>(obj); | |
483 } | |
484 | |
476 private QStandardItem CreateTreeItem(WarFoundryObject obj) | 485 private QStandardItem CreateTreeItem(WarFoundryObject obj) |
477 { | 486 { |
478 QVariant wrappedObject = QVariant.FromValue<WarFoundryObject>(obj); | 487 QVariant wrappedObject = WrapObject(obj); |
479 QStandardItem item = new QStandardItem(obj.Name); | 488 QStandardItem item = new QStandardItem(obj.Name); |
480 item.SetData(wrappedObject); | 489 item.SetData(wrappedObject); |
481 return item; | 490 return item; |
482 } | 491 } |
483 | 492 |
494 QStandardItem item = CreateTreeItem(obj); | 503 QStandardItem item = CreateTreeItem(obj); |
495 rootItem.AppendRow(item); | 504 rootItem.AppendRow(item); |
496 return item; | 505 return item; |
497 } | 506 } |
498 | 507 |
499 void SetCategoryButtons (Category[] categories) | 508 private void SetCategoryButtons(Category[] categories) |
500 { | 509 { |
501 //TODO create category buttons | 510 foreach (QAction action in categoryActions) |
502 } | 511 { |
503 | 512 layout.toolBar.RemoveAction(action); |
513 } | |
514 | |
515 if (categories != null && categories.Length > 0) | |
516 { | |
517 int catCount = categories.Length; | |
518 categoryActions = new QAction[catCount]; | |
519 int i = 0; | |
520 | |
521 foreach (Category category in categories) | |
522 { | |
523 QAction action = new QAction(this); | |
524 action.icon = new QIcon("icons/ui/add.png"); | |
525 NewUnitEventHandler handler = new NewUnitEventHandler(category, AddUnit); | |
526 ConnectMenuAction(action, handler.CreateNewUnit); | |
527 categoryActions[i] = action; | |
528 layout.toolBar.AddAction(action); | |
529 i++; | |
530 } | |
531 } | |
532 } | |
533 | |
534 private void AddUnit(Category cat) | |
535 { | |
536 QMessageBox.Information(this, "Add unit", cat.Name); | |
537 } | |
538 | |
504 void EnableCategoryButtons () | 539 void EnableCategoryButtons () |
505 { | 540 { |
506 //TODO enable category buttons | 541 //TODO enable category buttons |
507 } | 542 } |
508 | 543 |