# HG changeset patch # User Vladimir Vukicevic # Date 1198984173 28800 # Node ID 11244d5ac8494533dd5d137a000ff6047eb785e6 # Parent e716a854e9c7e84dbc27620d9d406bcc726b880e Improved Market Order screen significantly. - Added menu item toggles for showing completed orders - Added menu item toggles for showing station name - Added display of date order was entered - Changed bar to graphical display of % of order remaining (gray = background, green = bar) diff -r e716a854e9c7e84dbc27620d9d406bcc726b880e -r 11244d5ac8494533dd5d137a000ff6047eb785e6 src/org/mrrupert/eveberry/EveBerryMarketOrdersScreen.java --- a/src/org/mrrupert/eveberry/EveBerryMarketOrdersScreen.java Sat Dec 29 18:26:07 2007 -0800 +++ b/src/org/mrrupert/eveberry/EveBerryMarketOrdersScreen.java Sat Dec 29 19:09:33 2007 -0800 @@ -31,6 +31,7 @@ import net.rim.device.api.system.*; import net.rim.device.api.notification.*; import net.rim.device.api.collection.util.*; +import net.rim.device.api.util.*; import java.util.*; @@ -44,6 +45,11 @@ EveMarketOrderListField mSellOrderList; EveMarketOrderListField mBuyOrderList; + SimpleSortingVector mSellOrders; + SimpleSortingVector mBuyOrders; + + int mCompletedOrders; + public EveBerryMarketOrdersScreen(EveCharacterInfo forCharacter) { super(DEFAULT_MENU | DEFAULT_CLOSE); mChar = forCharacter; @@ -53,6 +59,31 @@ // stick a label here while we load add(new LabelField("Loading...", LabelField.USE_ALL_WIDTH)); + mBuyOrders = new SimpleSortingVector(); + mSellOrders = new SimpleSortingVector(); + + mBuyOrders.setSort(false); + mSellOrders.setSort(false); + + Comparator orderComparator = new Comparator() { + public int compare (Object a, Object b) { + EveMarketOrder am = (EveMarketOrder) a; + EveMarketOrder bm = (EveMarketOrder) b; + return (int) (bm.dateIssued - am.dateIssued); + } + + public boolean equals (Object a, Object b) { + EveMarketOrder am = (EveMarketOrder) a; + EveMarketOrder bm = (EveMarketOrder) b; + return (am.dateIssued == bm.dateIssued); + } + }; + + mBuyOrders.setSortComparator(orderComparator); + mSellOrders.setSortComparator(orderComparator); + + // kick off the query + EveBerryBackgroundActionListener listener = new EveBerryBackgroundActionListener() { public void onActionComplete(Object result, Object token) { Vector orders = (Vector) result; @@ -65,23 +96,105 @@ EveBerryBackground.GetBackgroundRunnable().requestCharacterMarketOrders(mChar, listener, this); } + public void makeMenu(Menu menu, int instance) { + super.makeMenu(menu, instance); + + if (EveBerry.sApp.mSettings.ShowCompletedMarketOrders) { + menu.add(new MenuItem("Hide Completed Orders", 0, 4) { + public void run() { + EveBerry.sApp.mSettings.ShowCompletedMarketOrders = false; + EveBerry.sApp.settingsChanged(); + rebuildFields(); + } + }); + } else { + menu.add(new MenuItem("Show Completed Orders", 0, 4) { + public void run() { + EveBerry.sApp.mSettings.ShowCompletedMarketOrders = true; + EveBerry.sApp.settingsChanged(); + rebuildFields(); + } + }); + } + + if (EveBerry.sApp.mSettings.ShowStationOnMarketOrders) { + menu.add(new MenuItem("Hide Station Name", 1, 4) { + public void run() { + EveBerry.sApp.mSettings.ShowStationOnMarketOrders = false; + EveBerry.sApp.settingsChanged(); + rebuildFields(); + } + }); + } else { + menu.add(new MenuItem("Show Station Name", 1, 4) { + public void run() { + EveBerry.sApp.mSettings.ShowStationOnMarketOrders = true; + EveBerry.sApp.settingsChanged(); + rebuildFields(); + } + }); + } + + menu.addSeparator(); + } + void setOrders(Vector orders) { - deleteAll(); + mBuyOrders.removeAll(); + mSellOrders.removeAll(); if (orders == null || orders.size() == 0) { - add(new LabelField("No orders.", LabelField.USE_ALL_WIDTH)); + deleteAll(); + add(new LabelField("No orders (or data request failed).", LabelField.USE_ALL_WIDTH)); return; } + mCompletedOrders = 0; + for (int i = 0; i < orders.size(); i++) { + EveMarketOrder order = (EveMarketOrder) orders.elementAt(i); + if (order.buyOrder) + mBuyOrders.add(order); + else + mSellOrders.add(order); + if (order.volRemaining == 0) + mCompletedOrders++; + } + + mBuyOrders.reSort(); + mSellOrders.reSort(); + + rebuildFields(); + } + + void rebuildFields() { + deleteAll(); + + if (!EveBerry.sApp.mSettings.ShowCompletedMarketOrders && + mCompletedOrders == (mBuyOrders.size() + mSellOrders.size())) + { + add(new LabelField("All orders complete (and hidden by pref).", LabelField.USE_ALL_WIDTH)); + return; + } + + // build the field structure mBuyOrderList = new EveMarketOrderListField(); mSellOrderList = new EveMarketOrderListField(); - for (int i = 0; i < orders.size(); i++) { - EveMarketOrder order = (EveMarketOrder) orders.elementAt(i); - if (order.buyOrder) - mBuyOrderList.addOrder(order); - else - mSellOrderList.addOrder(order); + for (int i = 0; i < mBuyOrders.size(); i++) { + EveMarketOrder emo = (EveMarketOrder) mBuyOrders.getAt(i); + + if (!EveBerry.sApp.mSettings.ShowCompletedMarketOrders && emo.volRemaining == 0) + continue; + + mBuyOrderList.addOrder(emo); + } + + for (int i = 0; i < mSellOrders.size(); i++) { + EveMarketOrder emo = (EveMarketOrder) mSellOrders.getAt(i); + + if (!EveBerry.sApp.mSettings.ShowCompletedMarketOrders && emo.volRemaining == 0) + continue; + + mSellOrderList.addOrder(emo); } Field f; diff -r e716a854e9c7e84dbc27620d9d406bcc726b880e -r 11244d5ac8494533dd5d137a000ff6047eb785e6 src/org/mrrupert/eveberry/EveBerrySettingsScreen.java --- a/src/org/mrrupert/eveberry/EveBerrySettingsScreen.java Sat Dec 29 18:26:07 2007 -0800 +++ b/src/org/mrrupert/eveberry/EveBerrySettingsScreen.java Sat Dec 29 19:09:33 2007 -0800 @@ -37,9 +37,13 @@ import java.io.*; class EveBerrySettings implements Persistable { + // 0.2 public String EveProxy; public boolean ShowStationOnMarketOrders; public boolean UseDeviceSideHTTP; + + // 0.2.1 + public boolean ShowCompletedMarketOrders; } class EveBerrySettingsScreen extends MainScreen { @@ -47,6 +51,7 @@ BasicEditField mProxyField; CheckboxField mShowStationOnMarketOrdersField; + CheckboxField mShowCompletedMarketOrdersField; CheckboxField mUseDeviceSideField; @@ -66,6 +71,8 @@ } mShowStationOnMarketOrdersField = new CheckboxField("Show station name on market orders", EveBerry.sApp.mSettings.ShowStationOnMarketOrders); + mShowCompletedMarketOrdersField = new CheckboxField("Show completed market orders", EveBerry.sApp.mSettings.ShowCompletedMarketOrders); + mUseDeviceSideField = new CheckboxField("Use device-side HTTP", EveBerry.sApp.mSettings.UseDeviceSideHTTP); add(new LabelField("A proxy can be used to cache results from the EVE API server for use by multiple applications. If you wish to use a proxy, enter the URL of eproxy.php here.")); @@ -75,6 +82,7 @@ add(new SeparatorField()); add(mShowStationOnMarketOrdersField); + add(mShowCompletedMarketOrdersField); add(new SeparatorField()); @@ -90,6 +98,7 @@ } EveBerry.sApp.mSettings.ShowStationOnMarketOrders = mShowStationOnMarketOrdersField.getChecked(); + EveBerry.sApp.mSettings.ShowCompletedMarketOrders = mShowCompletedMarketOrdersField.getChecked(); EveBerry.sApp.mSettings.UseDeviceSideHTTP = mUseDeviceSideField.getChecked(); EveBerry.sApp.settingsChanged(); diff -r e716a854e9c7e84dbc27620d9d406bcc726b880e -r 11244d5ac8494533dd5d137a000ff6047eb785e6 src/org/mrrupert/eveberry/EveMarketOrderListField.java --- a/src/org/mrrupert/eveberry/EveMarketOrderListField.java Sat Dec 29 18:26:07 2007 -0800 +++ b/src/org/mrrupert/eveberry/EveMarketOrderListField.java Sat Dec 29 19:09:33 2007 -0800 @@ -44,7 +44,10 @@ extends Field implements EveDatabaseReplyListener { - public static int SHOW_LOCATION = 1; // show the location or not; + final public static int kOrderBarBgColor = 0xaaaaaa; + final public static int kOrderBarFgColor = Color.DARKGREEN; + + final public static int SHOW_LOCATION = 1; // show the location or not; int mDisplayFlags = 0; public EveMarketOrder MarketOrder; @@ -100,16 +103,24 @@ int h = getHeight(); StringBuffer sb; String s; + int x; - // bar to the side - if (MarketOrder.buyOrder) { - //g.setColor(Color.YELLOW); - g.setColor(0xaaaaaa); - } else { - //g.setColor(Color.GREEN); - g.setColor(0xaaaaaa); - } - g.fillRect(1, 1, 4, h - 2); + // colored % bar to the side + int barHeight = h - 2; + g.setColor(kOrderBarBgColor); + g.fillRect(1, 1, 4, barHeight); + + int filledHeight = (int) (barHeight * ((double)MarketOrder.volRemaining / MarketOrder.volEntered)); + // make sure that if the order isn't filled that that's visible, + // also that if any has sold that that's visible also + if (MarketOrder.volRemaining > 0 && filledHeight < 1) + filledHeight = 1; + if (MarketOrder.volRemaining != MarketOrder.volEntered && filledHeight > (h-1)) + filledHeight = h - 1; + + g.setColor(kOrderBarFgColor); + g.fillRect(1, 1+(barHeight - filledHeight), 4, filledHeight); + w -= 5; g.setColor(Color.BLACK); @@ -146,11 +157,33 @@ g.drawText(stationName, 0, 0, DrawStyle.ELLIPSIS, w-2); } - // row: 12/99 @ 1,152,372 ISK date issued on right side + // row: 12/99 @ 1,152,372 ISK g.translate(0, mFontHeight); - s = Long.toString(MarketOrder.volRemaining) + "/" + Long.toString(MarketOrder.volEntered) + " @ " + EveUtils.FormatDouble(MarketOrder.price) + " ISK"; - g.drawText(s, 0, 0); - g.drawText(EveUtils.FormatTimestamp(MarketOrder.dateIssued), w - 2, 0, DrawStyle.TOP | DrawStyle.LEFT); + x = 0; + + s = Long.toString(MarketOrder.volRemaining); + x += g.drawText(s, x, 0); + + // Color.DARKGRAY isn't very dark. + g.setColor(0x333333); + s = "/" + Long.toString(MarketOrder.volEntered); + x += g.drawText(s, x, 0); + + g.setColor(Color.BLACK); + s = " @ " + EveUtils.FormatDouble(MarketOrder.price) + " ISK"; + x += g.drawText(s, x, 0); + + // now let's get the date issued off to the side + s = EveUtils.FormatTimestampShort(MarketOrder.dateIssued); + int stringWidth = mFont.getAdvance(s); + if (w - 2 - x < stringWidth) { + // not enough room; oh well. + x += 5; + } else { + x = w - 2 - stringWidth; + } + + g.drawText(s, x, 0); } // Causes the fields within this row manager to be layed out then diff -r e716a854e9c7e84dbc27620d9d406bcc726b880e -r 11244d5ac8494533dd5d137a000ff6047eb785e6 src/org/mrrupert/eveberry/EveUtils.java --- a/src/org/mrrupert/eveberry/EveUtils.java Sat Dec 29 18:26:07 2007 -0800 +++ b/src/org/mrrupert/eveberry/EveUtils.java Sat Dec 29 19:09:33 2007 -0800 @@ -118,4 +118,16 @@ df.format(c, sb, null); return sb.toString(); } + + public static String FormatTimestampShort(long t) { + Date d = new Date(t * 1000); + Calendar c = Calendar.getInstance(); + c.setTime(d); + + DateFormat df = DateFormat.getInstance(DateFormat.DATE_SHORT | DateFormat.TIME_SHORT); + StringBuffer sb = new StringBuffer(); + df.format(c, sb, null); + return sb.toString(); + } + }