@@ -54,7 +54,8 @@ protected override void OnClientRectangleUpdated()
5454
5555 private SortButton btnSort ;
5656 private EditorSuggestionTextBox tbSearch ;
57- private XNAListBox lbTileSetList ;
57+ private TileSetListBox lbTileSetList ;
58+ private XNAContextMenu tileSetContextMenu ;
5859
5960 private TileSetSortMode _tileSetSortMode ;
6061 private TileSetSortMode TileSetSortMode
@@ -87,11 +88,12 @@ public override void Initialize()
8788 UIHelpers . AddSearchTipsBoxToControl ( tbSearch ) ;
8889 tbSearch . TextChanged += TbSearch_TextChanged ;
8990
90- lbTileSetList = new XNAListBox ( WindowManager ) ;
91+ lbTileSetList = new TileSetListBox ( WindowManager , theaterGraphics . Theater . TileSets . Count ) ;
9192 lbTileSetList . Name = nameof ( lbTileSetList ) ;
9293 lbTileSetList . Y = tbSearch . Bottom ;
9394 lbTileSetList . Height = Height - tbSearch . Bottom ;
9495 lbTileSetList . Width = TileSetListWidth ;
96+ lbTileSetList . AllowRightClickUnselect = false ;
9597 lbTileSetList . SelectedIndexChanged += LbTileSetList_SelectedIndexChanged ;
9698 AddChild ( lbTileSetList ) ;
9799
@@ -114,6 +116,22 @@ public override void Initialize()
114116
115117 btnSort . LeftClick += ( s , e ) => sortContextMenu . Open ( GetCursorPoint ( ) ) ;
116118
119+ tileSetContextMenu = new EditorContextMenu ( WindowManager ) ;
120+ tileSetContextMenu . Name = nameof ( tileSetContextMenu ) ;
121+ tileSetContextMenu . Width = 200 ;
122+ tileSetContextMenu . AddItem ( "Pin" ,
123+ ( ) => { lbTileSetList . SetTileSetAsFavourite ( ( ( TileSet ) lbTileSetList . SelectedItem . Tag ) . Index ) ; RefreshTileSets ( ) ; } ,
124+ null ,
125+ ( ) => lbTileSetList . SelectedItem != null && ! lbTileSetList . IsTileSetFavourite ( ( ( TileSet ) lbTileSetList . SelectedItem . Tag ) . Index ) ) ;
126+ tileSetContextMenu . AddItem ( "Unpin" ,
127+ ( ) => { lbTileSetList . ClearFavouriteStatus ( ( ( TileSet ) lbTileSetList . SelectedItem . Tag ) . Index ) ; RefreshTileSets ( ) ; } ,
128+ null ,
129+ ( ) => lbTileSetList . SelectedItem != null && lbTileSetList . IsTileSetFavourite ( ( ( TileSet ) lbTileSetList . SelectedItem . Tag ) . Index ) ) ;
130+ tileSetContextMenu . AddItem ( "Unselect" , ( ) => lbTileSetList . SelectedIndex = - 1 ) ;
131+ AddChild ( tileSetContextMenu ) ;
132+
133+ lbTileSetList . RightClick += LbTileSetList_RightClick ;
134+
117135 base . Initialize ( ) ;
118136
119137 RefreshTileSets ( ) ;
@@ -123,6 +141,14 @@ public override void Initialize()
123141 WindowManager . RenderResolutionChanged += WindowManager_RenderResolutionChanged ;
124142 }
125143
144+ private void LbTileSetList_RightClick ( object sender , EventArgs e )
145+ {
146+ lbTileSetList . SelectedIndex = lbTileSetList . HoveredIndex ;
147+
148+ if ( lbTileSetList . SelectedItem != null )
149+ tileSetContextMenu . Open ( GetCursorPoint ( ) ) ;
150+ }
151+
126152 private void WindowManager_RenderResolutionChanged ( object sender , EventArgs e )
127153 {
128154 Width = WindowManager . RenderResolutionX - X ;
@@ -261,14 +287,15 @@ private void LbTileSetList_SelectedIndexChanged(object sender, EventArgs e)
261287 private void RefreshTileSets ( )
262288 {
263289 lbTileSetList . Clear ( ) ;
264- IEnumerable < TileSet > sortedTileSets = theaterGraphics . Theater . TileSets ; // TODO sort tilesets
290+ IOrderedEnumerable < TileSet > sortedTileSets = theaterGraphics . Theater . TileSets . OrderBy ( ts => ! lbTileSetList . IsTileSetFavourite ( ts . Index ) ) ;
265291
266292 switch ( TileSetSortMode )
267293 {
268294 case TileSetSortMode . ID :
295+ sortedTileSets = sortedTileSets . ThenBy ( ts => ts . Index ) ;
269296 break ;
270297 case TileSetSortMode . Name :
271- sortedTileSets = sortedTileSets . OrderBy ( ts => ts . SetName ) ;
298+ sortedTileSets = sortedTileSets . ThenBy ( ts => ts . SetName ) ;
272299 break ;
273300 }
274301
0 commit comments