notelab.docx

上传人:b****5 文档编号:7477369 上传时间:2023-01-24 格式:DOCX 页数:23 大小:18.88KB
下载 相关 举报
notelab.docx_第1页
第1页 / 共23页
notelab.docx_第2页
第2页 / 共23页
notelab.docx_第3页
第3页 / 共23页
notelab.docx_第4页
第4页 / 共23页
notelab.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

notelab.docx

《notelab.docx》由会员分享,可在线阅读,更多相关《notelab.docx(23页珍藏版)》请在冰豆网上搜索。

notelab.docx

notelab

/*

*NoteLab:

Anadvancednotetakingapplicationforpen-enabledplatforms

*

*Copyright(C)2006,DominicKramer

*

*Thisprogramisfreesoftware;youcanredistributeitand/ormodify

*itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby

*theFreeSoftwareFoundation;eitherversion2oftheLicense,or

*(atyouroption)anylaterversion.

*

*Thisprogramisdistributedinthehopethatitwillbeuseful,

*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof

*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe

*GNUGeneralPublicLicenseformoredetails.

*

*YoushouldhavereceivedacopyoftheGNUGeneralPublicLicensealong

*withthisprogram;ifnot,writetotheFreeSoftwareFoundation,Inc.,

*51FranklinStreet,FifthFloor,Boston,MA02110-1301USA.

*

*Foranyquestionsorcommentspleasecontact:

*DominicKramer

*kramerd@iastate.edu

*/

packagenoteLab.model.binder;

importjava.awt.Graphics;

importjava.awt.geom.Rectangle2D;

importjava.awt.print.PageFormat;

importjava.awt.print.Pageable;

importjava.awt.print.Printable;

importjava.awt.print.PrinterException;

importjava.util.Iterator;

importjava.util.LinkedList;

importjava.util.Vector;

importnoteLab.gui.listener.RepaintBroadcastCenter;

importnoteLab.gui.listener.RepaintListener;

importnoteLab.model.Page;

importnoteLab.model.Paper.PaperType;

importnoteLab.model.geom.FloatPoint2D;

importnoteLab.util.CopyReady;

importnoteLab.util.UnitScaleDependent;

importnoteLab.util.geom.Bounded;

importnoteLab.util.geom.RectangleUnioner;

importnoteLab.util.geom.Transformable;

importnoteLab.util.geom.unit.Unit;

importnoteLab.util.mod.ModBroadcaster;

importnoteLab.util.mod.ModListener;

importnoteLab.util.mod.ModType;

importnoteLab.util.render.PrinterRenderer2D;

importnoteLab.util.render.Renderable;

importnoteLab.util.render.Renderer2D;

importnoteLab.util.settings.SettingsUtilities;

/**

*AbinderrepresentsacollectionofPages.Thisclassstorestheinformation

*neededbyanyrepresentationofabinder.However,subclasseshandlehowPages

*arearrangedinthebinder.

*

*ThisclassisusedinthataCompositeCanvasusesaBinderto

*holdallofitsPages.

*

*@authorDominicKramer

*/

publicabstractclassBinderimplementsRenderable,Bounded,

RepaintBroadcastCenter,

ModBroadcaster,

ModListener,

Iterable,

Transformable,

Printable,

Pageable,

CopyReady,

UnitScaleDependent

{

/**

*Theformatinwhichthisbinder'spagesarein.Thisfield

*isusedwhenprintingthisbinder.

*/

privatestaticPageFormatLETTER_SIZE_FORMAT=newPageFormat();

/**Theindexofthisbinder'scurrentpage.*/

privateintcurPage;

/**Thelistofpagesthatthisbindercontains.*/

privateLinkedListpageList;

/**Thevectoroflistenersthatshouldbeinformedwhenrepaintsoccur.*/

privateVectorrepaintListeners;

/**

*Thevectoroflistenersthatshouldbeinformedwhenapagehasbeenadded

*orremovedfromthisbinderorwhenthisbinder'scurrentpagehasbeen

*modified.

*/

privateVectorbinderListeners;

/**Thelevel,alongthex-axis,atwhichthisbinderiscurrentlyscaled.*/

protectedfloatxScaleLevel;

/**Thelevel,alongthey-axis,atwhichthisbinderiscurrentlyscaled.*/

protectedfloatyScaleLevel;

/**

*Thevectoroflistenersthatshouldbeinformedwhenthisbinderhasbeen

*modified.

*/

privateVectormodListenerVec;

publicBinder(floatxScaleLevel,floatyScaleLevel,Page...pages)

{

if(pages==null)

thrownewNullPointerException();

if(pages.length==0)

pages=newPage[]{newPage(SettingsUtilities.getPaperType(),

xScaleLevel,yScaleLevel,

Unit.getScreenResolution(),

SettingsUtilities.getUnitScaleFactor())};

this.modListenerVec=newVector();

this.xScaleLevel=xScaleLevel;

this.yScaleLevel=yScaleLevel;

this.repaintListeners=newVector();

this.binderListeners=newVector();

this.pageList=newLinkedList();

for(Pagep:

pages)

addPage(p);

this.curPage=-1;

setCurrentPage(0);

}

//----------------=[Methodsusedformodifyingthepages]=------------------//

/**

*Implementedsoanobjectofthisclasscanbeusedina

*foreachloop.

*/

publicIteratoriterator()

{

returnthis.pageList.iterator();

}

/**Addsadeepcopyofthecurrentpagetotheendofthebinder.*/

publicvoidcopyPage()

{

addPage(getCurrentPage().getCopy());

}

/**Addsanewpagetotheendofthebinder.*/

publicvoidaddNewPage()

{

addPage(newPage(getCurrentPage()));

}

publicvoidaddNewPageAfterCurrent()

{

PagecurPage=getCurrentPage();

addPageAfter(curPage,newPage(curPage));

}

publicvoidaddNewPageBeforeCurrent()

{

PagecurPage=getCurrentPage();

addPageBefore(curPage,newPage(curPage));

}

/**

*Addsthegivenpagetotheedgeofthebinder.

*

*@parampageThepagetoaddtotheendofthebinder.

*/

publicvoidaddPage(Pagepage)

{

if(page==null)

thrownewNullPointerException();

this.pageList.add(page);

page.addModListener(this);

setCurrentPage(getNumberOfPages()-1);

doLayout();

notifyModListeners(ModType.Other);

for(BinderListenerlistener:

this.binderListeners)

listener.pageAdded(this,page);

}

privatevoidaddPage(Pagepage,intindex)

{

if(page==null)

thrownewNullPointerException();

this.pageList.add(index,page);

page.addModListener(this);

setCurrentPage(this.pageList.indexOf(page));

doLayout();

notifyModListeners(ModType.Other);

for(BinderListenerlistener:

this.binderListeners)

listener.pageAdded(this,page);

}

publicvoidaddPageBefore(PagebasePage,PagenewPage)

{

intindex=this.pageList.indexOf(basePage);

if(index==-1)

{

addPage(newPage);

return;

}

addPage(newPage,index);

}

publicvoidaddPageAfter(PagebasePage,PagenewPage)

{

intindex=this.pageList.indexOf(basePage);

if(index==-1)

{

addPage(newPage);

return;

}

index++;

if(index>=this.pageList.size())

{

addPage(newPage);

return;

}

addPage(newPage,index);

}

/**

*Removesthecurrentpagefromthebinder.Ifthepageisthelastpageinthebinder

*anewpageisaddedtothebindersothatthebinderisnotempty.

*/

publicvoidremoveCurrentPage()

{

removePage(getCurrentPage());

}

/**

*Removesthegivenpagefromthebinderifitisactuallyapageinthebinder.Ifthe

*pageisthelastpageinthebinderanewpageisaddedtothebindersothatthebinder

*isnotempty.

*

*@parampageThepagetoremovefromthebinder.

*/

publicvoidremovePage(Pagepage)

{

if(page==null)

thrownewNullPointerException();

if(getNumberOfPages()<2)

return;

PagecurPage=getCurrentPage();

curPage.setSelected(false);

intnewIndex=this.pageList.indexOf(page);

if(newIndex>0)

newIndex--;

page.removeModListener(this);

this.pageList.remove(page);

this.curPage=newIndex;

getCurrentPage().setSelected(true);

redraw();

doLayout();

notifyModListeners(ModType.Other);

for(BinderListenerlistener:

this.binderListeners)

{

listener.pageRemoved(this,page);

listener.currentPageChanged(this);

}

}

/**

*Usedtogetthepageatthespecifiedindex.Indicesstartwith0and

*not1.

*

*@paramindexTheindexofthepagetoretrieve.

*

*@returnThepageatthegivenindexornulliftheindexisinvalid.

*/

privatePagegetPageAt(intindex)

{

if(index<0||index>=getNumberOfPages())

returnnull;

returnthis.pageList.get(index);

}

publicPagegetPageAt(FloatPoint2Dpoint)

{

if(point==null)

thrownewNullPointerException();

for(Pagepage:

this)

{

if(page.contains(point))

returnpage;

}

returnnull;

}

/**

*Usedtogetthebinder'scurrentpage.

*

*@returnThebinder'scurrentpage.

*/

publicPagegetCurrentPage()

{

returngetPageAt(curPage);

}

/**

*Usedtosetthebinder'scurrentpagetothepagewiththespecifiedindex.

*

*@paramindexTheindexofthenewcurrentpage.Iftheindexisinvalidnothing

*isdone.

*/

publicvoidsetCurrentPage(finalintindex)

{

if(index<0||index>=getNumberOfPages())

thrownewArrayIndexOutOfBoundsException();

if(this.curPage==index)

return;

this.curPage=index;

notifyModListeners(ModType.Other);

for(BinderListenerlistener:

this.binderListeners)

listener.currentPageChanged(this);

}

/**

*Setsthebinder'scurrentpagetothepagewhichcontainsthegivenpoint.Thepointis

*relativetotheCompositeCanvaswhichcontainsthisBinder.

*

*@parampointThepointintheCompositeCanvaswhichholdsthisbinder.

*

*@returntrueifthepointisvalidandthecurrentpagehasbeensetor

*falseotherwise.

*/

publicbooleansetCurrentPage(FloatPoint2Dpoint)

{

for(inti=0;i

{

if(getPageAt(i).contains(point))

{

booleanchanged=(i!

=this.curPage);

setCurrentPage(i);

returnchanged;

}

}

returnfalse;

}

publicbooleancanFlipForward()

{

return(this.curPage+1)

}

publicvoidflipForward()

{

if(canFlipForward())

setCurrentPage(this.curPage+1);

}

publicbooleancanFlip

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1