import RssReader._ import swing._ object RssGui extends SimpleSwingApplication { var rssFeeds = List(("None Loaded", Seq(""))) var configFileChooser = new FileChooser(new java.io.File("./")) var configFileName = new String // Channel Panel Construction: Channel Select val channelLabel = new Label { text = "Select a channel:" } val channelSelect = new ComboBox(List("None Loaded")) { } val channelSelectPanel = new BoxPanel(Orientation.Vertical) { contents += channelLabel contents += channelSelect border = Swing.EmptyBorder(0, 0, 0, 30) } // Channel Panel Construction: Rss Display val rssDisplay = new ListView(List("")) // Channel Panel Construction val channelPanel = new BoxPanel(Orientation.Horizontal) { contents += channelSelectPanel contents += rssDisplay border = Swing.EmptyBorder(0, 0, 30, 0) } // Button Panel Construction val setConfigFileButton = new Button { text = "Set Config File" } val loadRssButton = new Button { text = "Load Feeds" } val buttonPanel = new BoxPanel(Orientation.Horizontal) { contents += setConfigFileButton contents += loadRssButton } def top = new MainFrame { title = "Rss Reader" listenTo(channelSelect.selection, setConfigFileButton, loadRssButton) reactions += { case swing.event.SelectionChanged(`channelSelect`) => rssDisplay.listData = rssFeeds(channelSelect.selection.index)._2 pack case swing.event.ButtonClicked(`setConfigFileButton`) => if(configFileChooser.showOpenDialog(channelSelectPanel) == FileChooser.Result.Approve) { configFileName = configFileChooser.selectedFile.getAbsolutePath } case swing.event.ButtonClicked(`loadRssButton`) => if(configFileName != "") { rssFeeds = combineFeeds(getRssFeeds(configFileName)) channelSelect.peer.setModel(ComboBox.newConstantModel(rssFeeds.map(_._1))) rssDisplay.listData = rssFeeds(0)._2 pack } } // Overall construction contents = new BoxPanel(Orientation.Vertical) { contents += channelPanel contents += buttonPanel border = Swing.EmptyBorder(10, 10, 10, 10) } } }