📄 maincanvas.java
字号:
import javax.microedition.lcdui.*;
import java.util.Vector;
public class MainCanvas extends Canvas implements Interface_Constants
{
private MainMIDlet mm;
private HTTPThread ht;
private RmsSaver rms;
private GuageThread gt;
private boolean bLoaded = false;
private boolean bLoadedIndex = false;
private boolean bLoadedInfo = false;
private boolean bLoadedDir = false;
private boolean bLoadedRead = false;
private String strdata = "";
private String strdataInfoAll = null;
private String strdataReadAll = null;
private String[] strdataInfo = null;
private String[] strdataRead = null;
private Vector vIndex = null;
private Vector vDir = null;
private Vector vDirD = null;
private Vector vDirC = null;
private Vector vDirIndex = null;
private static boolean bSaved = false;
private static String bookid = "";
private static String cttbookid = "";
private static String contentid = "";
private static String contentidprev = "";
private static String contentidnext = "";
private static String contentrowsat = "";
private static boolean bReged = false;
private static String username = "";
private static String password = "";
public static int sw = 0;
public static int sh = 0;
public static Font font = Utils.fontold;
public static int fonth = Utils.fontoldh;
public static int styleid = 0;
public static int ctextid = 0;
public static int rowsperpage = 0;
public static int rowsoffindex = 0;
public static int rowsoffinfo = 0;
public static int rowsoffread = 0;
private static int state = S_MENU_BEFORE;
private static int statetoload = S_MENU;
private int indexpage = 0;
private int indexall = 0;
private int selectedset = 0;
private int selectedmenu = 0;
private int selectedindex = 0;
private int selecteddir = 0;
private int selectedline = 0;
public MainCanvas(MainMIDlet mm,HTTPThread ht)
{
setFullScreenMode(true);
sw = getWidth();
sh = getHeight();
if(sw==240)
{
if(sh<310)
sh = 306;
}
else if(sw==176)
{
if(sh<210)
sh = 204;
font = Utils.fontsps;
fonth = Utils.fontspsh;
}
else if(sw==120)
{
font = Utils.fontsps;
fonth = Utils.fontspsh;
}
rowsperpage = sh/fonth-3;
this.mm = mm;
this.ht = ht;
this.gt = new GuageThread(this);
loadData();
selectedmenu = bSaved?0:1;
//~ img1 = Image.createImage(20,20);
//~ Graphics gg = img1.getGraphics();
//~ gg.setColor(0x000000);
//~ gg.fillRect(0,0,20,20);
//~ gg.setColor(0xff0000);
//~ gg.drawString("sdafasdgadsfgdfssdfh",0,0,0);
//~ int[] ab = new int[20*20];
//~ img1.getRGB(ab,0,20,0,0,20,20);
//~ for(int i=0;i<ab.length;i++)
//~ {
//~ if(ab[i] == -16777216)
//~ ab[i] = 0x00000000;
//~ System.out.println(ab[i]);
//~ }
//~ img2 = Image.createRGBImage(ab,20,20,true);
}
//~ Image img1;
//~ Image img2;
public void loadData()
{
rms = new RmsSaver(13);
try
{
String[] atem = rms.getData();
styleid = Integer.parseInt(atem[9]);
ctextid = Integer.parseInt(atem[10]);
if(atem[0].equals("1"))
{
bSaved = true;
cttbookid = atem[1];
contentid = atem[2];
contentidprev = atem[3];
contentidnext = atem[4];
contentrowsat = atem[5];rowsoffread = Integer.parseInt(contentrowsat);
bReged = (atem[6]=="1")?true:false;
username = atem[7];
password = atem[8];
System.out.println("MainCanvas::loadData()");
}
}catch(Exception e){System.out.println(e.getMessage());}
}
public void saveData()
{
rms.setData(10,String.valueOf(styleid));
rms.setData(11,String.valueOf(ctextid));
if(bSaved)
{
rms.setData(1,"1");
rms.setData(2,cttbookid);
rms.setData(3,contentid);
rms.setData(4,contentidprev);
rms.setData(5,contentidnext);
rms.setData(6,String.valueOf(rowsoffread));
rms.setData(6,String.valueOf(rowsoffread));
rms.setData(7,bReged?"1":"0");
rms.setData(8,username);
rms.setData(9,password);
System.out.println("MainCanvas::saveData()");
}
}
public void connrequest(String url)
{
gt.start();
ht.request(url);
}
public void connrefresh(boolean bSuccess)
{
bLoaded = false;
if(bSuccess)
{
strdata = ht.getResult();
//System.out.println(strdata);
if(strdata != null)
{
if(statetoload == S_INDEX)
{
bLoadedIndex = true;
parseIndex(strdata);
}
else if(statetoload == S_BOOKINFO)
{
parseBookInfo(strdata);
}
else if(statetoload == S_BOOKDIR)
{
parseBookDir(strdata);
}
else if(statetoload == S_BOOKREAD)
{
parseBookRead(strdata);
}
}
}
else
{
strdata = "网络连接异常";
statetoload = S_ERROR;
}
gt.stop();
toState(statetoload);
repaint();
}
public void toState(int state)
{
this.state = state;
repaint();
}
public void paint(Graphics g)
{
g.setFont(font);
//g.setColor(0x000000);
//g.fillRect(0,0,getWidth(),getHeight());
paintUI(g);
if(state == S_ERROR)
{
g.setColor(C_TEXT[ctextid]);
g.drawString(strdata,getWidth()/2,getHeight()/2,g.HCENTER|g.BOTTOM);
paintButton(g,sw,sh,B_OK,0,C_TEXT[ctextid]);
}
else if(state == S_SETTING_BEFORE)
{
toState(S_SETTING);
}
else if(state == S_SETTING)
{
g.setColor(C_TEXT[ctextid]);
g.drawString("颜色风格",getWidth()/2,sh/2-40,g.HCENTER|g.BOTTOM);
if(selectedset==0)
g.drawRect(20,sh/2-65,sw-40,50);
else if(selectedset==1)
g.drawRect(20,sh/2-5,sw-40,50);
int y = sh/2-40;
for(int i=0;i<C_STYLE.length;i++)
{
int x = 40+25*i;
g.setColor(C_STYLE[i][C_MAIN]);
g.fillRect(x,y,20,20);
g.setColor(C_STYLE[i][C_BMOON]);
g.drawLine(x,y,x+20,y);//-
g.drawLine(x,y,x,y+20);//|
g.setColor(C_STYLE[i][C_BSUN]);
g.drawLine(x,y+20,x+20,y+20);//-
g.drawLine(x+20,y,x+20,y+20);//|
}
g.setColor(C_TEXT[ctextid]);
g.drawString("字体颜色",sw/2,sh/2+20,g.HCENTER|g.BOTTOM);
for(int i=0;i<C_TEXT.length;i++)
{
g.setClip(20+i*40,sh/2+20,30,20);
g.setColor(0x888888-C_TEXT[i]);
//g.fillRect(20+i*40,sh/2,30,20);
g.setColor(C_TEXT[i]);
g.drawString("字体颜色",20+i*40,sh/2+20,0);
g.setClip(0,0,sw,sh);
}
paintButton(g,sw,sh,4,0,C_TEXT[ctextid]);
}
else if(state == S_MENU_BEFORE)
{
toState(S_MENU);
}
else if(state == S_MENU)
{
paintMenu(g,selectedmenu,0x0000ff,C_TEXT[ctextid]);
paintButton(g,sw,sh,4,0,C_TEXT[ctextid]);
paintButton(g,sw,sh,3,1,C_TEXT[ctextid]);
}
else if(state == S_INDEX_BEFORE)
{
g.setColor(C_TEXT[ctextid]);
g.drawString("loading....",sw/2,getHeight()/2,g.HCENTER|g.BOTTOM);
paintGuage(g);
}
else if(state == S_INDEX)
{
//textPaint(g,null,font,10,10,sw-20,sh-fonth-10,0,C_TEXT[ctextid],true,true,0x0000ff,sw,getHeight());
//g.setColor(0x0000ff);
//g.drawRect(10-2,10-1,sw-20+3,sh-fonth-10-1);
g.setClip(10,10,sw-20-1,sh-fonth-10-1);
if(vIndex != null)
{
for(int i=0;i<vIndex.size();i++)
{
String[] tem = (String[])vIndex.elementAt(i);
g.setColor(selectedindex==i?0x0000ff:C_TEXT[ctextid]);
g.drawString(tem[0],sw/2,10+fonth*i,g.HCENTER|g.TOP);
}
}
g.setClip(0,0,sw,sh);
paintButton(g,sw,sh,2,0,C_TEXT[ctextid]);
paintButton(g,sw,sh,1,1,C_TEXT[ctextid]);
if(indexpage>0)
g.drawString("上页←",sw/2,sh,g.RIGHT|g.BOTTOM);
if(rowsperpage*(indexpage+1)<indexall)
g.drawString("→下页",sw/2,sh,g.LEFT|g.BOTTOM);
}
else if(state == S_BOOKINFO_BEFORE)
{
g.setColor(C_TEXT[ctextid]);
g.drawString("loading....",sw/2,getHeight()/2,g.HCENTER|g.BOTTOM);
paintGuage(g);
}
else if(state == S_BOOKINFO)
{
g.setColor(C_TEXT[ctextid]);
textPaint(g,strdataInfoAll,font,10,10,sw-20,sh-fonth-10,rowsoffinfo,C_TEXT[ctextid],true,true,0x0000ff,sw,getHeight());
paintScrollbar(g,sw-BORDERR+1-4,BORDERU,3,sh-BORDERU-BORDERD,sw,sh,rowsoffindex,rowsperpage,rowsall,0xffffff,0xffffff,0);
paintButton(g,sw,sh,5,0,C_TEXT[ctextid]);
paintButton(g,sw,sh,1,1,C_TEXT[ctextid]);
}
else if(state == S_BOOKDIR_BEFORE)
{
g.setColor(C_TEXT[ctextid]);
g.drawString("loading....",sw/2,getHeight()/2,g.HCENTER|g.BOTTOM);
paintGuage(g);
}
else if(state == S_BOOKDIR)
{
//textPaint(g,null,font,10,10,sw-20,sh-fonth-10,0,C_TEXT[ctextid],true,true,0x0000ff,sw,getHeight());
//g.setColor(0x0000ff);
//g.drawRect(10-2,10-1,sw-20+3,sh-fonth-10-1);
g.setClip(BORDERL,BORDERU,sw-BORDERL-BORDERR,sh-BORDERU-BORDERD);
if(vDirIndex==null)vDirIndex = new Vector();
else vDirIndex.removeAllElements();
if(vDirIndex != null)
{
int linecount = 0;
for(int i=0;i<vDir.size();)
{
vDirIndex.addElement(String.valueOf(i));
String[] tem = (String[])vDir.elementAt(i);
if(tem[0].equals("dd"))
{
if(tem[6]=="0")
{
g.setColor(selectedline==linecount?0x0000ff:C_TEXT[ctextid]);
g.drawString("+"+tem[1],20+(Integer.parseInt(tem[5]))*20,10+fonth*(linecount-rowsoffindex),g.LEFT|g.TOP);
do
{
i++;
if(i<vDir.size())
{
String[] temm = (String[])vDir.elementAt(i);
if(temm[0].equals("dd") && Integer.parseInt(temm[5]) <= Integer.parseInt(tem[5]))
{
//System.out.println(i+" "+temm[0]+" "+temm[5]);
break;
}
}
}while(i<vDir.size());
}
else
{
g.setColor(selectedline==linecount?0x0000ff:C_TEXT[ctextid]);
g.drawString("-"+tem[1],20+(Integer.parseInt(tem[5]))*20,10+fonth*(linecount-rowsoffindex),g.LEFT|g.TOP);
i++;
}
}
else
{
g.setColor(selectedline==linecount?0x0000ff:C_TEXT[ctextid]);
g.drawString(tem[1],20+(Integer.parseInt(tem[5]))*20,10+fonth*(linecount-rowsoffindex),g.LEFT|g.TOP);
i++;
}
linecount++;
}
}
//if(vIndex != null)
//{
// for(int i=0;i<vDir.size();i++)
// {
// String[] tem = (String[])vDir.elementAt(i);
// g.setColor(selecteddir==i?0x0000ff:C_TEXT[ctextid]);
// g.drawString((tem[0].equals("dd")?(tem[6]=="1"?"-":"+"):"")+tem[1],20+(Integer.parseInt(tem[5]))*20,10+fonth*i,g.LEFT|g.TOP);
// }
//}
g.setClip(0,0,sw,sh);
paintButton(g,sw,sh,6,0,C_TEXT[ctextid]);
paintButton(g,sw,sh,1,1,C_TEXT[ctextid]);
}
else if(state == S_BOOKREAD_BEFORE)
{
g.setColor(C_TEXT[ctextid]);
g.drawString("loading....",sw/2,getHeight()/2,g.HCENTER|g.BOTTOM);
paintGuage(g);
}
else if(state == S_BOOKREAD)
{
textPaint(g,strdataReadAll,font,BORDERL,BORDERU,sw-BORDERL-BORDERR,sh-BORDERU-BORDERD-5,rowsoffread,C_TEXT[ctextid],true,false,0x0000ff,sw,sh);
paintScrollbar(g,sw-BORDERR+1-4,BORDERU,3,sh-BORDERU-BORDERD,sw,sh,rowsoffread,rowsperpage,rowsall,0xffffff,0xffffff,0);
paintButton(g,sw,sh,7,0,C_TEXT[ctextid]);
paintButton(g,sw,sh,1,1,C_TEXT[ctextid]);
g.setColor(C_TEXT[ctextid]);
g.drawString("前章←",sw/2,sh,g.RIGHT|g.BOTTOM);
g.drawString("→后章",sw/2,sh,g.LEFT|g.BOTTOM);
}
//~ g.drawImage(img1,0,0,0);
//~ g.drawImage(img2,20,0,0);
}
public void paintUI(Graphics g)
{
g.setColor(C_STYLE[styleid][C_MAIN]);
g.fillRect(0,0,sw,sh);
g.setColor(C_STYLE[styleid][C_BSUN]);
g.drawLine(sw-BORDERR,BORDERU,sw-BORDERR,sh-BORDERD);//|
g.setColor(C_STYLE[styleid][C_BMOON]);
g.drawLine(BORDERL,BORDERU,sw-BORDERR,BORDERU);//-
g.setColor(C_STYLE[styleid][C_BMOON]);
g.drawLine(BORDERL,BORDERU,BORDERL,sh-BORDERD);//|
g.setColor(C_STYLE[styleid][C_BSUN]);
g.drawLine(BORDERL,sh-BORDERD,sw-BORDERR,sh-BORDERD);//-
}
public void keyPressed(int k)
{
//if(k==-6 || k==-21)
// k = KEYL;
//if(k==-7 || k==-22)
// k = KEYR;
int ga = getGameAction(k);
if(state == S_ERROR)
{
if(k==KEY_NUM1)
{
toState(S_MENU_BEFORE);
}
}
else if(state == S_SETTING)
{
if(k==KEY_NUM1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -