On 09/15/2013 01:14 PM, Michael T. Pope wrote:
> On Fri, 13 Sep 2013 21:57:53 +0930
> "Michael T. Pope" <mp...@computer.org> wrote:
>> The next obvious category are dialogs that do not really need to be modal.
>> Many of the uses of showConfirmDialog are asking pretty critical
>> questions (e.g. reconnect, quit, etc).  These could be vanilla
>> JOptionPanes.
> Thinking further about dialog modality, IMHO the main justification is for
> non-modal is that some decisions plausibly require you to look around the map
> etc to gather the information you need.  Similarly we have multi-item dialogs
> (e.g. the EndTurnDialog) which might need to wait while you check on several
> things.
>
> Conversely, I think it is safe, desirable even, to make pre-game
> dialogs modal, not to mention debug dialogs, and perhaps the map
> editor cases.  Otherwise, I think modal dialogs are preferrable for
> really clear decisions, especially where the player is likely to
> already have a clear idea of what is right (e.g. The "abandon colony"
> dialog --- it is usually a case of "oops, lets not do that" or "yes, I
> am done with this place").  The other concern is the potential for
> confusion if we leave a dialog waiting while the user does something
> else that invalidates the dialog's prerequisites --- the server will
> (should:-) detect the problem and the user will probably get the
> "server can not do that" error.
>
> What remains is unclear.  We already have some special cases in
> InGameInputHandler where the dialog lives in a SwingTask (which is
> Runnable), and perhaps could be run in a Thread or converted to use a
> continuation passing style like the existing new land name/new region
> name code.  IGIH is confusing, showing clear signs of being hacked on
> my someone with limited understanding (me), and could do with some
> attention.
>
> Anyway here is my categorization.  Comments appreciated, especially
> for the "unclear" category.
>
> Cheers,
> Mike Pope

I agree with the above. In my opinion, any dialog concerning an action 
that can be canceled and postponed without any consequences should be 
modal. This includes the declare independence dialog, for example. If 
you need to check up on your colonies, just cancel and come back later. 
Some additional comments below.


Regards

Michael


>
>
> ** Dialogs that are better modal
>
>    * EditOptionDialog extends FreeColDialog<Boolean>
>        Canvas.showEditOptionDialog
>          GUI.showEditOptionDialog
>            ListOptionUI.ListOptionUI
>            ListOptionUI.ListOptionUI
>    Modal:  Setting options is pre-game or user preferences.
>     
>     
>    * EditSettlementDialog extends FreeColDialog<IndianSettlement>
>        Canvas.showEditSettlementDialog
>          CanvasMapEditorMouseListener.mousePressed
>    Modal:  Map editor.
>          
>    
>    * LoadingSavegameDialog extends FreeColDialog<Boolean>
>        Canvas.showLoadingSavegameDialog
>          GUI.showLoadingSavegameDialog
>            ConnectController.startSavedGame
>    Modal: Pre-game or ends the current game.
>    
>      
>    * OptionsDialog extends FreeColDialog<OptionGroup>
>        DifficultyDialog extends OptionsDialog
>          Canvas.showDifficultyDialog
>            GUI.showDifficultyDialog
>              NewPanel.actionPerformed
>              ShowDifficultyAction.actionPerformed
>        ClientOptionsDialog extends OptionsDialog
>          Canvas.showClientOptionsDialog
>            GUI.showClientOptionsDialog
>              PreferencesAction.actionPerformed
>        GameOptionsDialog extends OptionsDialog
>          Canvas.showGameOptionsDialog
>            GUI.showGameOptionsDialog
>              StartGamePanel.actionPerformed
>              ShowGameOptionsAction.actionPerformed
>        MapGeneratorOptionsDialog extends OptionsDialog
>          Canvas.showMapGeneratorOptionsDialog
>            GUI.showMapGeneratorOptionsDialog
>              StartGamePanel.actionPerformed
>              ShowMapGeneratorOptionsAction.actionPerformed
>              MapEditorController.newMap
>    Modal:  Options processing usually pre-game.
>    
>     
>    * ParametersDialog extends FreeColDialog<Parameters>
>        Canvas.showParametersDialog
>          GUI.showParametersDialog
>            DetermineHighSeasAction.actionPerformed
>    Modal: High seas distances input from the map editor.
>    
>      
>    * RiverStyleDialog extends FreeColDialog<String>
>        Canvas.showRiverStyleDialog
>          CanvasMapEditorMouseListener.mousePressed
>    Modal:  Map editor, can always cancel and try again.
>    
>      
>    * ScaleMapSizeDialog extends FreeColDialog<Dimension>
>        Canvas.showScaleMapSizeDialog
>          GUI.showScaleMapSizeDialog
>            ScaleMapAction.actionPerformed
>    Modal:  Map editor action.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          GUI.showChoiceDialog
>            DebugUtils.addBuildings
>            DebugUtils.addNewUnitToTile
>            DebugUtils.addUnitGoods
>            DebugUtils.changeOwnership
>            DebugUtils.changeOwnership
>            DebugUtils.changeRole
>            DebugUtils.setColonyGoods
>            DebugUtils.setRumourType
>        Canvas.showChooseFoundingFatherDialog
>        Canvas.showChooseMonarchActionDialog
>    Modal:  Debug actions.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          GUI.showChoiceDialog
>            MapEditorTransformPanel.ResourceTransform.transform
>    Modal:  Map editor.
>
>    * FreeColDialog.createLoadDialog
>        Canvas.showLoadDialog (variants)
>          GUI.showLoadDialog (variants)
>            OptionsDialog.actionPerformed
>            FileOptionUI.FileOptionUI
>            MapEditorController.loadGame
>            InGameController.loadGame
>    Modal:  These are big decisions.
>      
>    * FreeColDialog.createMapSizeDialog
>        Canvas.showMapSizeDialog
>          GUI.showMapSizeDialog
>            NewEmptyMapAction.actionPerformed
>    Modal:  Map editor action.
>      
>    * FreeColDialog.createSaveDialog
>        Canvas.showSaveDialog (variants)
>          GUI.showSaveDialog (variants)
>            OptionsDialog.actionPerformed
>            MapEditorController.saveGame
>            InGameController.saveGame
>    Modal:  These are big decisions.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showSimpleChoiceDialog
>            GUI.showSimpleChoiceDialog
>              ConnectController.joinMultiplayerGame
>    Modal:  Pre-game.
>
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            DebugUtils.stepRNG
>    Model:  Debug action.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            FreeColClient.newGame
>            FreeColClient.askToQuit
>            FreeColClient.retire
>            ShowMainAction.actionPerformed
>            InGameInputHandler.reconnect
>            InGameInputHandler.setDead
>            ConnectController.unblockServer
>            InGameController.loadGame
>            InGameController.saveGame
>    Modal:  Big decisions.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            EditSettlementDialog.actionPerformed
>    Modal:  Map editor.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            ColonyPanel.closeColonyPanel
>    Modal:  Abandon colony?  Very clear decision.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.clearOrders
>    Modal:  Confirm cancel pioneering work.  Usually deliberate or a
>        mistake.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.clearSpeciality
>    Modal:  Confirm clear speciality.  Either deliberate or a mistake.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.disbandActiveUnit
>    Modal:  Confirm disband.  Either deliberate or a mistake.
>
>         
>    * FreeColDialog.createInputDialog
>        Canvas.showInputDialog
>          GUI.showInputDialog
>            DebugUtils.addGold
>            DebugUtils.addImmigration
>            DebugUtils.addLiberty
>            DebugUtils.addUnitGoods
>            DebugUtils.setColonyGoods
>            DebugUtils.skipTurns
>    Modal:  Debug actions.
>
>    * FreeColDialog.createInputDialog
>        Canvas.showInputDialog
>          GUI.showInputDialog
>            InGameController.buildColony
>            InGameController.rename
>    Modal:  Choosing the colony/unit name.  See no reason to look away here.
>
>
>
> ** Dialogs that should be non-modal
>
>    * CaptureGoodsDialog extends FreeColDialog<List<Goods>>
>        Canvas.showCaptureGoodsDialog
>          GUI.showCaptureGoodsDialog
>            InGameInputHandler.LootCargoSwingTask.doNoResultWork
>    Non-Modal:  Want to see which goods are usable nearby, or at European
>        prices, etc.
>    
>     
>    * ChooseFoundingFatherDialog extends FreeColDialog<FoundingFather>
>        Canvas.showChooseFoundingFatherDialog
>          GUI.showChooseFoundingFatherDialog
>            InGameInputHandler.chooseFoundingFather
>    Non-Modal: Already special, this is in InGameInputHandler and the
>        server tolerates non-response.
>    
>    
>    * ConfirmDeclarationDialog extends FreeColDialog<List<String>>
>        Canvas.showConfirmDeclarationDialog
>          GUI.showConfirmDeclarationDialog
>            InGameController.declareIndependence
>    Non-Modal:  You want to be sure that everything is ready for this one!

Yes, but you can always cancel, check the game some more and then come back.

>    
>      
>    * DumpCargoDialog extends FreeColDialog<List<Goods>>
>        Canvas.showDumpCargoDialog
>          GUI.showDumpCargoDialog
>            InGameController.unload
>    Non-Modal:  Want to decide which goods are least valuable.
>      
>    
>    * EmigrationDialog extends FreeColDialog<Integer>
>        Canvas.showEmigrationDialog
>          GUI.showEmigrationDialog
>            InGameInputHandler.fountainOfYouth
>            InGameController.setCurrentPlayer
>    Non-Modal:  Want to review units present and choose the most useful one.
>        The case in IGC might be able to move to IGIH.
>    
>      
>    * FindSettlementDialog<T> extends FreeColDialog<T>
>        Canvas.showFindSettlementDialog
>          GUI.showFindSettlementDialog
>             FindSettlementAction.actionPerformed
>    Non-Modal:  Want to look inside various settlements, or at Europe.
>    
>
>    * MonarchPanel extends FreeColDialog<Boolean>
>        Canvas.showMonarchPanelDialog
>          GUI.showMonarchPanelDialog
>            DebugMenu.buildDebugMenu
>            InGameInputHandler.monarchAction
>            InGameInputHandler.ShowMonarchPanelSwingTask.doWork
>    Non-modal:  Has to be, we want to support the trick where you move the
>        goods-to-be-boycotted away.  Already handled specially in IGIH.
>    
>      
>    * NegotiationDialog extends FreeColDialog<DiplomaticTrade>
>        Canvas.showNegotiationDialog
>          GUI.showNegotiationDialog
>            InGameInputHandler.diplomacy
>            InGameController.moveTradeColony
>    Non-Modal:  Want to check what resources are needed or which colonies can
>        be traded.
>      
>    
>    * PreCombatDialog extends FreeColDialog<Boolean>
>        Canvas.showPreCombatDialog
>          GUI.showPreCombatDialog
>            InGameController.confirmPreCombat
>    Non-Modal:  Want to review defences before provoking a fight.
>    
>      
>    * RecruitDialog extends FreeColDialog<Integer>
>        Canvas.showEuropeDialog
>          GUI.showEuropeDialog
>            EuropePanel.actionPerformed
>    Non-Modal:  Want to review units present and choose the most useful one.
>    
>     
>    * SelectDestinationDialog extends FreeColDialog<Location>
>        Canvas.showSelectDestinationDialog
>          GUI.showSelectDestinationDialog
>            EuropePanel.DestinationPanel.add
>            InGameController.selectDestination
>    Non-Modal:  Want to review destination state.
>    
>      
>    * TradeRouteDialog extends FreeColDialog<Boolean>
>        Canvas.showTradeRouteDialog
>          GUI.showTradeRouteDialog
>            TradeRouteAction.actionPerformed
>            InGameController.assignTradeRoute
>    Non-Modal:  Want to look around at where the route should go and what it
>        should collect.
>      
>    
>    * TradeRouteInputDialog extends FreeColDialog<Boolean>
>        Canvas.showTradeRouteInputDialog
>          GUI.showTradeRouteInputDialog
>            TradeRouteDialog.TradeRouteDialog
>    Non-modal:  Resource allocation to trade routes needs thought.
>      
>      
>    * TrainDialog extends FreeColDialog<Integer>
>        Canvas.showEuropeDialog
>          GUI.showEuropeDialog
>            EuropePanel.actionPerformed
>    Non-Modal:  Want to review units present and determine which is best to
>        train.
>
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showArmedUnitIndianSettlementDialog
>    Non-modal:  Might provoke a war here.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showBoycottedGoodsDialog
>    Non-modal:  Need to check goods levels.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showBuyDialog
>    Non-modal:  Want to check what goods are needed nearby.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showClaimDialog
>    Non-Modal:  This might provoke native attack, may need to check defenses.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showScoutForeignColonyDialog
>    Non-Modal:  Negotiate, spy or attack?  Might be a hard call to make.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showScoutIndianSettlementDialog
>    Non-Modal:  Speak, tribute or attack?  Usually clear, but probably
>        should be the same as the previous case.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showSimpleChoiceDialog
>            GUI.showSimpleChoiceDialog
>              InGameController.attemptBuyFromSettlement
>              InGameController.attemptSellToSettlement
>              InGameController.attemptGiftToSettlement
>    Non-Modal:  Which goods?  Might need some thought.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showSimpleChoiceDialog
>            GUI.showSimpleChoiceDialog
>              InGameController.moveUseMissionary
>    Non-Modal:  This is the choice of which enemy to incite against.  It
>        might be a hard choice.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameInputHandler.NewLandNameSwingTask.doNoResultWork
>            InGameInputHandler.ShowConfirmDialogSwingTask.doWork
>    Non-Modal:  These are grafted onto other events, so someone has to
>        wait.  Already specially handled in IGIH.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.confirmHostileAction
>    Non-Modal:  Warning about attacking when not at war.  Might need to
>       think about this.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.unloadUnitAtStop
>    Non-Modal:  Overflow the warehouse?  Want to check other
>        destinations?
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.checkCashInTreasureTrain
>    Non-Modal:  Want to see if there is a galleon available to avoid
>        paying the fee.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.moveLearnSkill
>    Non-Modal:  Confirm learn a skill from the natives.  Want to check
>        skills present.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.payArrears
>    Non-Modal:  Want to check the goods presence.
>
>
>    * FreeColDialog.createInputDialog
>        Canvas.showInputDialog
>          GUI.showInputDialog
>            InGameInputHandler.NewLandNameSwingTask.doNoResultWork
>            InGameInputHandler.NewRegionNameSwingTask.doNoResultWork
>    Non-Modal:  As above in createConfirmDialog.
>
>
> ** Unclear cases
>    
>    * EndTurnDialog extends FreeColDialog<Boolean>
>        Canvas.showEndTurnDialog
>          GUI.showEndTurnDialog
>            InGameController.endTurn
>    I would like to click through the multiple units and see
>        what the problem is.  Should the dialog remain present or not?

Yes, it should. I think this is much like the find settlement dialog.

>    
>      
>    * SelectAmountDialog extends FreeColDialog<Integer>
>        Canvas.showSelectAmountDialog
>          GUI.showSelectAmountDialog
>            QuickActionMenu.promptForAmount
>            DefaultTransferHandler.getAmount
>    Usually run out of the ColonyPanel, and I tend to have a
>        good idea of what amount is wanted before bringing up this panel.
>    
>      
>    * WarehouseDialog extends FreeColDialog<Boolean>
>        Canvas.showWarehouseDialog
>          GUI.showWarehouseDialog
>            ColonyPanel.actionPerformed
>    Run out of ColonyPanel, often with a clear idea of what is
>        to be done.

If not, come back later.

>
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          GUI.showChoiceDialog
>            InGameController.moveDisembark
>            InGameController.moveEmbark
>    The decision to dis/embark has been made, it is merely the
>        detail of which unit to disembark or embark on to be decided.

Modal.

>    
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showIndianSettlementTradeDialog
>    Buy, sell or gift?  Usually a clear choice.
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showSellDialog
>    Accept, haggle or cancel?  Just might want to check something...
>
>    * FreeColDialog.createChoiceDialog
>        Canvas.showChoiceDialog
>          Canvas.showUseMissionaryDialog
>    Establish/denounce or incite is usually a clear choice.
>
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showModelMessages
>    When showing a message from Europe/Colony/WorkLocation this is the
>        choice to bring up a panel showing the source.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            EuropePanel.DestinationPanel.add
>    The "leave colonists behind" decision.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            ColonyPanel.closeColonyPanel
>    Colony is now too small for the current buildable.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            GUI.tryLeaveColony
>    Abandon education and leave the colony?
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.work
>    Leave school and stop teaching?
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameInputHandler.indianDemand
>    Player response to native demand.  It would be really good to block
>        for a response here because this is blocking the server (waiting
>        in askTimeout).  OTOH the player might want to look around the
>        other colonies to see if the tribute can be spared.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.buildColonyShowWarnings
>    Build a colony with warnings?

Modal. You should know what you are doing.

>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.moveDisembark
>    Disembark single unit or not?
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.moveExplore
>            InGameController.moveExplore
>    Explore LCR or not, and accept/decline strange mounds.

Modal. Either do it, or don't.

>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.moveHighSeas
>    Confirm move to the high seas?

Modal.

>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.moveUseMissionary
>    Confirm the payment to incite.
>
>    * FreeColDialog.createConfirmDialog
>        Canvas.showConfirmDialog (and variants)
>          GUI.showConfirmDialog (and variants)
>            InGameController.payForBuilding
>    Confirm pay for building.
>      
>


------------------------------------------------------------------------------
LIMITED TIME SALE - Full Year of Microsoft Training For Just $49.99!
1,500+ hours of tutorials including VisualStudio 2012, Windows 8, SharePoint
2013, SQL 2012, MVC 4, more. BEST VALUE: New Multi-Library Power Pack includes
Mobile, Cloud, Java, and UX Design. Lowest price ever! Ends 9/22/13. 
http://pubads.g.doubleclick.net/gampad/clk?id=64545871&iu=/4140/ostg.clktrk
_______________________________________________
Freecol-developers mailing list
Freecol-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freecol-developers

Reply via email to