/* * TimelineCanvas.java * * Copyright (C) 2005-2008 Tommi Laukkanen * http://www.substanceofcode.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.substanceofcode.twitter.views; import com.substanceofcode.infrastructure.Device; import com.substanceofcode.twitter.TwitterController; import com.substanceofcode.twitter.model.Status; import java.util.Vector; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; /** * TimelineCanvas * * @author Tommi Laukkanen (tlaukkanen at gmail dot com) */ public class TimelineCanvas extends Canvas { private TwitterController controller; private Vector statuses; private StatusList statusList; private TabBar menuBar; private Menu menu; private Menu statusMenu; private int verticalScroll; /** * Creates a new instance of TimelineCanvas * @param controller Application controller */ public TimelineCanvas(TwitterController controller) { this.controller = controller; setFullScreenMode(true); /** Menu bar tabs */ String[] labels = {"Archive", "Replies", "Recent", "Public"}; menuBar = new TabBar(2, labels, getWidth()); /** Menu */ String[] menuLabels = {"Update status", "Reload tweets", "Settings", "About", "Exit", "Cancel"}; menu = new Menu(menuLabels, getWidth(), getHeight()); /** Status menu */ String[] statusMenuLabels = {"Open in browser", "Open link in browser", "Reply", "Cancel"}; statusMenu = new Menu(statusMenuLabels, getWidth(), getHeight()); /** Status list control */ statusList = new StatusList(getWidth(), getHeight()); verticalScroll = 0; } public void setTimeline(Vector friendsTimeline) { this.statuses = friendsTimeline; } protected void paint(Graphics g) { g.setColor(Theme.TWITTER_BLUE_COLOR); g.fillRect(0, 0, getWidth(), getHeight()); if(menu.isActive()==false && statusMenu.isActive()==false) { statusList.draw(g, statuses, menuBar.getHeight() + verticalScroll + TalkBalloon.textFont.getHeight()/2); menuBar.draw(g, 0); } else if(menu.isActive()) { menu.draw(g); } else if(statusMenu.isActive()) { statusMenu.draw(g); } } private void handleTabChange() { verticalScroll = 0; int tabIndex = menuBar.getSelectedTabIndex(); if(tabIndex==0) { /** Archive selected */ controller.showArchiveTimeline(); } else if(tabIndex==1) { /** Friends selected */ controller.showResponsesTimeline(); } else if(tabIndex==2) { /** Friends selected */ controller.showFriendsTimeline(); } else if(tabIndex==3) { /** Public selected */ controller.showPublicTimeline(); } } /** Handle repeated key presses. */ protected void keyRepeated(int keyCode) { handleUpAndDownKeys(keyCode); repaint(); } private void handleUpAndDownKeys(int keyCode) { int gameAction = this.getGameAction(keyCode); if(gameAction == Canvas.UP) { if(menu.isActive()) { menu.selectPrevious(); } else if(statusMenu.isActive()) { statusMenu.selectPrevious(); } else { verticalScroll += getHeight()/6;// menuBar.getHeight(); if(verticalScroll>0) { verticalScroll = 0; } } } else if(gameAction == Canvas.DOWN) { if(menu.isActive()) { menu.selectNext(); } else if(statusMenu.isActive()) { statusMenu.selectNext(); } else { verticalScroll -= getHeight()/6; //menuBar.getHeight(); } } } public void activateMenuItem() { int selectedIndex = menu.getSelectedIndex(); if(selectedIndex==0) { controller.showStatusView(""); } else if(selectedIndex==1) { controller.clearTimelines(); handleTabChange(); } else if(selectedIndex==2) { controller.showLoginForm(); } else if(selectedIndex==3) { controller.about(); } else if(selectedIndex==4) { controller.exit(); } else if(selectedIndex==5) { /** Cancel = Do nothing */ } } public void activateStatusMenuItem() { int selectedIndex = statusMenu.getSelectedIndex(); Status selectedStatus = statusList.getSelected(); if(selectedIndex==0) { if(selectedStatus!=null) { selectedStatus.openInBrowser(controller.getMIDlet()); return; } } else if(selectedIndex==1) { if(selectedStatus!=null) { selectedStatus.openIncludedLink(controller.getMIDlet()); return; } } else if(selectedIndex==2) { if(selectedStatus!=null) { controller.showStatusView("@" + selectedStatus.getScreenName() + " "); } }else if(selectedIndex==3) { /** Cancel = Do nothing */ } } public void keyPressed(int keyCode) { int gameAction = this.getGameAction(keyCode); String keyName = this.getKeyName(keyCode); if(gameAction == Canvas.LEFT) { menuBar.selectPreviousTab(); handleTabChange(); repaint(); return; } else if(gameAction == Canvas.RIGHT) { menuBar.selectNextTab(); handleTabChange(); repaint(); return; } else if(gameAction == Canvas.FIRE) { if(menu.isActive()) { menu.deactivate(); activateMenuItem(); } else if(statusMenu.isActive()) { statusMenu.deactivate(); activateStatusMenuItem(); } else if(statusList.getSelected()!=null){ statusMenu.activate(); } } else if( keyName.indexOf("SOFT")>=0 && keyName.indexOf("1")>0 || (Device.isNokia() && keyCode==-6) || keyCode == TimelineCanvas.KEY_STAR) { /** Left soft key pressed */ if(menu.isActive()) { menu.deactivate(); activateMenuItem(); } else { menu.activate(); } } else if( ((keyName.indexOf("SOFT")>=0 && keyName.indexOf("2")>0) || (Device.isNokia() && keyCode==-7) || keyCode == TimelineCanvas.KEY_POUND) ) { /** Right soft key pressed */ if(menu.isActive()) { menu.deactivate(); activateMenuItem(); } else { menu.activate(); } } handleUpAndDownKeys(keyCode); repaint(); } }