JP4934045B2 - 携帯電話の対話型画像生成 - Google Patents
携帯電話の対話型画像生成 Download PDFInfo
- Publication number
- JP4934045B2 JP4934045B2 JP2007534980A JP2007534980A JP4934045B2 JP 4934045 B2 JP4934045 B2 JP 4934045B2 JP 2007534980 A JP2007534980 A JP 2007534980A JP 2007534980 A JP2007534980 A JP 2007534980A JP 4934045 B2 JP4934045 B2 JP 4934045B2
- Authority
- JP
- Japan
- Prior art keywords
- ipprojectmanager
- display
- itopleft
- iclientrect
- map
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/011—Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/04817—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance using icons
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
- G06F3/0485—Scrolling or panning
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04B—TRANSMISSION
- H04B1/00—Details of transmission systems, not covered by a single one of groups H04B3/00 - H04B13/00; Details of transmission systems not characterised by the medium used for transmission
- H04B1/38—Transceivers, i.e. devices in which transmitter and receiver form a structural unit and in which at least one part is used for functions of transmitting and receiving
- H04B1/3827—Portable transceivers
- H04B1/3833—Hand-held transceivers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04M—TELEPHONIC COMMUNICATION
- H04M1/00—Substation equipment, e.g. for use by subscribers
- H04M1/72—Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
- H04M1/724—User interfaces specially adapted for cordless or mobile telephones
- H04M1/72403—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality
- H04M1/72427—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality for supporting games or graphical animations
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04M—TELEPHONIC COMMUNICATION
- H04M1/00—Substation equipment, e.g. for use by subscribers
- H04M1/72—Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
- H04M1/724—User interfaces specially adapted for cordless or mobile telephones
- H04M1/72469—User interfaces specially adapted for cordless or mobile telephones for operating the device by selecting functions from two or more displayed items, e.g. menus or icons
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Signal Processing (AREA)
- User Interface Of Digital Computer (AREA)
- Mobile Radio Communication Systems (AREA)
- Telephone Function (AREA)
- Processing Or Creating Images (AREA)
- Telephonic Communication Services (AREA)
Description
110:キーパッド
120:カラーディスプレイ
130:4個の方向ボタン130
140:「OK」ボタン
150:左下と右下に現れるコマンドを起動するためのボタン
160:電話にロードされた種々のアプリケーション用のアイコン
170:ボックス枠
205:正方形のアイコンで示されるアクティブ領域
210:現在使用中のホットスポット
215:二重線の太い境界線215
220:記述
225:現在選択されている別のホットスポット
230:タブ
235:タブ
240:ホットスポット
245:ホットスポット
250:タブ
255:電話ホットスポット
260:現在選択されている電話ホットスポット
265:正方形の枠
310:現在選択されているホットスポット
320:記述
330:種々のホットスポット
340:ホットスポット
350:ホットスポット
370:メタデータホットスポット
380:電話ホットスポット
付録A1〜A4は、本発明の好適な実施形態による、対話型画像生成のシステムを実現するために使用されるXMLファイルのソースリストである。
[0046] APPENDIX Al
[0047] <?xml version = "1.0" ?> <VirtualTourLocatio[pi]>
[0048] <ImageNavigator>
[0049] <ImageFile>PHOTOS/paddington_map.jpg</ImageFile>
[0050] <ViewerType>.l2D</ViewerType> </ImageNavigator> < Hotspot>
[0051] <Position>0.26 0.688235 0.302 0.750035</Position> <XMLSource>XML/paddington_station_interior.xml</XMLSource>
[0052] <Tip>Paddington Station</Tip> </Hotspot> < Hotspot>
[0053] <Position>0.74 0.370588 0.78 0.432353 </Position>
[0054] <XMLSource>XML/sale_place.xml</XMLSource>
[0055] <Tip>Sale Place</Tip> </Hotspot> <Hotspot>
[0056] <Position>0.67 0.461765 0.712 0.523529</Position>
[0057] <XMLSource>XML/south_wharf_road.xml</XMLSource>
[0058] <Tip>South Wharf</Tip> </Hotspot> <Hotspot>
[0059] <Position>O.558 0.620588 0.6 0.679412</Positio[pi]>
[0060] <XMLSource>XML/st_marys_hospital.xml</XMLSource>
[0061] <Tip>St. Mary's Hospital</Tip> </H[omicron]tspot> <Hotspot>
[0062] <Position>0.346 0.752941 0.388 0.814706</Position>
[0063] <XMLSource>XML/london_street.xml</XMLSource>
[0064] <Tip>London St</Tip> </Hotspot> <Hotspot>
[0065] <Position>O.836 0.220588 0.878 0.282388</Position> <XMLSource>XML/hilton_londo[pi]_metropole.xml </XMLSource>
[0066] <Tip>Hilton London Metropole</Tip> </Hotspot> </VirtualTourLocation>
[0067] APPENDIX A2
[0068] <?xml version = "1.0" ?> <VirtualTourLocation>
[0069] <ImageNavigator>
[0070] <ImageFile>PHOTOS/st_marys_hospital.jpg</ImageFile>
[0071] <ViewerType>Pano</ViewerType>
[0072] < panotype>SPHERE</panotype>
[0073] < pitchRange>-0.231 0.231 </pitchRange>
[0074] <vFov>-O.231 0.231</vFov>
[0075] <initialView>0.00286517 84.7636 26.4649</i[pi]itialView>
[0076] <Autospin>0</Autospin> </ImageNavigator> < Hotspot>
[0077] <XMLSource>XML/south_wharf_road.xml</XMLSource>
[0078] < Position>0.21572 0.730924 0.231289 0.904535</Position>
[0079] <Tip>Praed South Wharf</Tip> </Hotspot> < Hotspot>
[0080] <XMLSource>XML/london_street.xml</XMLSource>
[0081] < Position>0.752424 0.823293 0.767659 O.995984</Position>
[0082] <Tip>Praed London St</Tip> </Hotspot> </VirtualTourLocation>
[0083] APPENDIX A3
[0084] <?xml version = "1.0" ?> <VirtualTourLocation>
[0085] <ImageNavigator>
[0086] <ImageFile>PHOTOS/paddington_station_interior.jpg</ImageFile>
[0087] <ViewerType>Pano</ViewerType>
[0088] <panotype>SPHERE</panotype>
[0089] < pitchRange>-0.236 0.236</pitchRange>
[0090] <vFov>-O.236 0.236</vFov>
[0091] <i[pi]itialView>0.00286517 148.971 27.0379</initialView>
[0092] <Autospin>0</Autospin> </ImageNavigator> <Hotspot>
[0093] <XMLSource>XML/london_street.xml</XMLSource>
[0094] <Position>0.380086 0.650602 0.395028 0.817046</Position>
[0095] <Tip> Walkway To Praed St. </Tip> </Hotspot> <Hotspot>
[0096] <XMLSource>XML/paddington_Ge[pi]Info_meta.xml</XMLSource>
[0097] < Position>0.292291 0.666667 0.308291 O.847667</Position>
[0098] <Tip>META\General Information. txt</Tip> </Hotspot> </VirtualTourLocation> APPENDIX A4
[0099] <?xml version = "1.0" ?> <VirtualTourl_ocation>
[0100] <ImageNavigator>
[0101] <ImageFile>PHOTOS/paddington_GenInfo_meta.jpg</ImageFile>
[0102] <ViewerType>J2D</ViewerType> </ImageNavigator> <Hotspot>
[0103] <XMLSource>XML/paddington_station_interior.xml</XMLSource>
[0104] <Position>0.0148 0.111 0.0529 0.444</Position>
[0105] <Tip> Phone / +44 8457 484950</Tip> </Hotspot> < Hotspot>
[0106] <XML[Xi]ource>XML/paddington_station_i[pi]terior.xml </XMLSource>
[0107] <Position>0.229 0.143 0.2682 0.461 </Position>
[0108] <Tip>Phone / +44 8456 005604</Tip> </Hotspot> < Hotspot>
[0109] <XMLSource>XML/paddington_station_interior.xml</XMLSource>
[0110] <Position>0.403 0.127 0.4423 0.445</Position >
[0111] <Tip>Phone / +44 8456 001515</Tip> </Hotspot> < Hotspot>
[0112] <XMLSource>XML/paddington_station_interior.xml </XMLSource>
[0113] <Position>0.564 0.143 0.6032 0.461</Position>
[0114] <T[iota]p>Phone / +44 8453 303728</Tip> </Hotspot> <Hotspot>
[0115] <XMLSource>XML/paddington_station_interior.xml </XMLSource>
[0116] <Position>O.71 0.111 0.7492 0.444</Position>
[0117] <Tip>Phone / +44 2072 620344</Tip> </Hotspot> <Hotspot>
[0118] <XMLSource>XML/paddington_station_interior.xml </XMLSource>
[0119] < Position>0.852 0.127 0.8914 0.445</Position>
[0120] <Tip>Phone / +44 2072 620344</Tip> </Hotspot> </VirtualTourLocation>
[0121] APPENDIX Bl
[0122] const Tint KMaxPhoneLength = 0x10;
[0123] CHintController: :CHintController(): ipProjectManager(NULL), ipDrawEngine(NULL), ipProjectSniffler(NULL) { }
[0124] CHintController: : ~CHintController()
[0125] { delete ipProjectManager; delete ipProjectSniffler; delete ipDrawEngine; delete iScrollTimer; delete iLogFile; } void CHintController: :Constructl_()
[0126] { ipProjectSniffler = CHintProjectSniffler: :NewL(); if(!ipProjectSniffler->Sniff(KDataDirectoryC)) if( !ipProjectSniffler->Sniff(KDataDirectoryD)) if( !ipProjectSniffler->Sniff(KDataDirectoryE))
[0127] {
[0128] ShowErrorDialog(KNoContentErrorMsgLnl,
[0129] KNoContentErrorMsgLn2);
[0130] ExitApplicationO; return;
[0131] >
[0132] TFileName chosenProjDir; if(!ChooseProjectL(chosenProjDir))
[0133] {
[0134] ExitApplication(); return;
[0135] } ipProjectManager = CHintProjectManager: :NewL(chosenProjDir); ipProjectManager- >LoadVTourL(); ipDrawEngine = CHintDrawEngine: :NewL(); ipDrawEngine- >SetProject(ipProjectMa[pi]ager); ipDrawEngine->SetController(this); iPenDown = false; iPenDrag = false; iPenUp = false; iScrollTimer = CPeriodic: :NewL(CActive: :EPriorityStandard); iPointerEventDown.iPosition.iX = 0; iPointerEventDown.iPosition.iY = 0; iPointerEventDrag.iPosition.iX = 0; iPointerEventDrag.iPosition.iY = 0; iPointerEventUp.iPosition.iX = 0; iPointerEventUp.iPosition.iY = 0; >
[0136] TBool CHintController: :ChooseProjectL(TFileName& chosenProjDir, TBool bAddCrtNb) TBool bOk = true; RArray<TName> projects; CleanupClosePushL(projects); ipProjectSniffler->GetProjects(projects); if(projects.Count() == 1)
[0137] { ipProjectSniffler->GetProjectDir(projects[0], chosenProjDir); CleanupStack: :PopAndDestroy(); return bOk;
[0138] }
[0139] CDesCArrayFlat* items = new(ELeave) CDesCArrayFlat(projects.Count());
[0140] CleanupStack: : PushL(items); for(int i = 0; i < projects. CountQ; i + + )
[0141] {
[0142] TName name; if(bAddCrtNb)
[0143] { name.AppendNum(i + 1); name.Append(_L("\t"));
[0144] } name.Append(projects[i]); items- >AppendL(name);
[0145] }
[0146] Tint nChosenProj = 0; if(GetUserChosenProject(nChosenProj, items)) ipProjectSniffler->GetProjectDir(projects[nChosenProj], chosenProjDir); else bOk = false; items->Reset();
[0147] CleanupStack: :PopAndDestroy(); ' CleanupStack: :PopAndDestroy(); return bOk; }
[0148] TKeyResponse CHintController: :HandleKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
[0149] {
[0150] TKeyResponse keyResponse = EKeyWasConsumed; Tint active = GetActiveViewIndex(); Tint count = GetViewCountQ; if( aType ! = EEventKey) return EKeyWasNotConsumed; TFileName metaFileName; ipProjectManager->GetProjectDirectory(metaFileName); switch (aKeyEvent. iScanCode)
[0151] { case EStdKeyUpArrow: ipDrawEngine->ScrollUp(); break; case EStdKeyDownArrow: ipDrawEngine->ScrollDown(); break; case EStdKeyLeftArrow: ipDrawEngine->ScrollLeft(); break; case EStdKeyRightArrow: ipDrawEngine->ScrollRight(); break; case 49: case 48: case 51:
[0152] { ipDrawEngine->ClearCache(); if(aKeyEvent.iScanCode == 49)
[0153] { active-; active = active < 0 ? count - 1 : active;
[0154] } else
[0155] { active+ + ; active = active % count; >
[0156] Display ViewNameBylndex(active); PrepareViewToActivate(active); SetActiveViewBylndex(active);
[0157] } break; case EStdKeyNkpAsterisk: case 42: case EStdKeyHash: case EStdKeyNkpMinus: ipProjectManager->GetCrtGallery()->inCrtHotSpot = ipProjectManager->GetCrtGallery()->GetNextHotSpot(aKeyEvent.iScanCode == 42 aKeyEvent.iScanCode == EStdKeyNkpAsterisk);
[0158] ShowTooltip(ipProjectManager->GetCrtGallery()- >GetCrtHotSpot()->iTip); ipDrawEngine->Update(); break; case EStdKeyDevice3: if(active == 0)
[0159] { ipDrawEngine->ClearCache(); CHintHotSpot* pCrtHotSpot = ipProjectManager- >GetCrtGallery()->GetCrtHotSpot(); bool bMetaSpot = false; TFileName& tip = pCrtHotSpot->iTip; if(tip.Find(KMetaFileTag) ! = KErrNotFound)
[0160] { bMetaSpot = true; metaFileName. Append (tip);
[0161] MetaViewSetFileNameL(metaFileName);
[0162] }
[0163] TFileName& link = pCrtHotSpot->iLink; if(!ipProjectManager->GalleryIsLoaded(link))
[0164] { ipProjectManager->LoadvTourl_ocationL(li[pi]k); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterTpCrtHotSpot = true;
[0165] > else
[0166] { TFileName& crtGalleryName = ipProjectMa[pi]ager- >GetCrtGallery()->iXMLFileName; if(link != crtGalleryName)
[0167] { <-> ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true- } }
[0168] Tint active = 1; if(bMetaSpot) active = 2;
[0169] DisplayViewNameBylndex(active); SetActiveViewBylndex(active); } else inactive == 1)
[0170] { ipDrawEngine->ClearCache(); CHintHotSpot* pCrtHotSpot = ipProjectManager- >GetCrtGallery()->GetCrtHotSpot(); bool bMetaSpot = false; TFileName& tip = pCrtHotSpot->iTip; if(tip.Fi[pi]d(KMetaFileTag) ! = KErrNotFound)
[0171] { bMetaSpot = true; metaFileName.Append(tip);
[0172] MetaViewSetFileNameL(metaFileName);
[0173] }
[0174] TFileName& link = pCrtHotSpot->iLink; if(!ipProjectManager->GalleryIsLoaded(link))
[0175] { ipProjectManager->LoadVTourLocationL(li[pi]k); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true; if(lbMetaSpot) ipDrawEngine->Update();
[0176] } else !
[0177] {
[0178] TFileNameS. crtGalleryName = ipProjectManager-
[0179] >GetCrtGallery()->iXMLFileName; if(link != crtGalleryName)
[0180] { ipProjectManager->SetCrtGallery(link); ipDrawE[pi]gine->ibCenterToCrtHotSpot = true; if(! bMetaSpot) ipDrawEngine->Update();
[0181] } else
[0182] { keyResponse = EKeyWasNotConsumed;
[0183] } } if(bMetaSpot)
[0184] { active = 2;
[0185] SetActiveViewBylndex(active); } } else if( active == 2 )
[0186] {
[0187] CHintHotSpot* pCrtHotSpot = ipProjectManager- >GetCrtGallery()->GetCrtHotSpot();
[0188] TFileName& tip = pCrtHotSpot->iTip; Tint pos = tip.Find(KMetaPhoneTag); if(pos ! = KErrNotFound) { pos += KMetaPhoneTag().Length(); Tint phoneNbLength = tip.LengthQ - pos; TBuf<KMaxPhoneLength> buf; buf = tip.Right(phoneNbLength); if(!ConfirmDialog(tip, KDialConfMsg)) break;
[0189] TRAPDferr. DialNumberUbun : ): if (err)
[0190] User: :InfoPrint(_L("Error dialing")); break;
[0191] } else if(tip.Find(KMetaEmailTag) I = KErrNotFound)
[0192] { break;
[0193] } } default: keyResponse = EKeyWasNotConsumed;
[0194] } return keyResponse;
[0195] } void CHintController: :PrepareViewToActivate(TInt active)
[0196] { inactive == 0)
[0197] {
[0198] HBufC* locationName = HBufC: :Newl_C(ipProjectManager- >GetCrtGallery()->iXMLFileName.Length());
[0199] *locationName = ipProjectManager->GetCrtGallery()->iXMLFileName; TFileName map; ipProjectManager->GetStartupLocation(map); if(!ipProjectManager->GalleryIsLoaded(map))
[0200] { ipProjectManager->LoadVTourLocationl_(map); ipProjectManager->SetCrtGallery(map); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0201] > else
[0202] { ipProjectManager->SetCrtGallery(map); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0203] >. ipProjectManager->GetCrtGallery()- >SetCurrentHotSpotByLink(*locationName);
[0204] CleanupStack: : PopAndDestroy(locationName);
[0205] } else if(active == 1)
[0206] { CHintHotSpot* pCrtHotSpot = ipProjectManager->GetCrtGallery()- >GetCrtHotSpot();
[0207] TFileName& link = pCrtHotSpot->il_ink; if(!ipProjectManager->GalleryIsLoaded(link))
[0208] { ipProjectManager->LoadVTourLocationL(link); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true; } else
[0209] { ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true; } } else inactive == 2)
[0210] {
[0211] CHintHotSpot* pCrtHotSpot = ipProjectManager->GetCrtGallery()- >GetCrtHotSpot();
[0212] TFileName& tip = pCrtHotSpot->iTip; i
[0213] TFileName& link = pCrtHotSpot->iLink; TFileName metaFileName; ipProjectManager->GetProjectDirectory(metaFileName); metaFileName.Append(tip); MetaViewSetFileNameL( metaFileName);
[0214] MetaViewUseDrawEngine(tip.Find(KMetaFileTag) != KErrNotFound); if(!ipProjectManager->GalleryIsLoaded(link))
[0215] { ipProjectManager->LoadVTourl_ocationL(link); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0216] } else
[0217] { ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0218] } void CHintController: :HandlePointerEventL(const TPointerEvent& aPointerEvent)
[0219] { switch(aPointerEvent.iType)
[0220] { case TPointerEvent: :EButtonlDown: iPenDown = true; iPenDrag = false; iPointerEventDown = aPointerEvent; iPointerEventDrag = aPointerEvent; break; case TPointerEvent: :EDrag: if([upsilon]PenDown) return; . iPenDrag = true;
[0221] {
[0222] TStdScanCode direction =
[0223] CheckPenDragDirection( iPointerEventDrag, aPointerEvent); switch (direction)
[0224] { case EStdKeyUpArrow: ipDrawEngine->ScrollDown(); break; case EStd Key Down Arrow: ipDrawEngine->ScrollUp(); break; case EStdKeyLeftArrow: ipDrawEngine->ScrollRight(); break; case EStdKeyRightArrow: ipDrawEngine->Scrolll_eft(); break; default: iPenDrag = false; } } iPointerEventDrag = aPointerEvent; break; case TPointerEvent: :EButtonlUp: if(iPenDrag && iScrollTimer && iScrollTimer->IsActive()) iScrollTimer->Cancel(); if([upsilon]PenDrag)
[0225] {
[0226] TPoint imagePos(0,0); ipDrawEngine->ImagePosFromScreenPos(imagePos, aPointerEvent.iPosition);
[0227] Tint nTappedSpot = ipProjectManager->GetCrtGallery()- >GetHotSpotFromPos(imagePos); if( nTappedSpot ! = -1)
[0228] { ipProjectManager->GetCrtGallery()->inCrtHotSpot nTappedSpot;
[0229] ShowTooltip(ipProjectManager->GetCrtGallery()- >GetCrtHotSpot()->iTip); ipDrawEngine->ibCenterToCrtHotSpot = false; ipDrawEngine->Update();
[0230] TKeyEvent aKeyEvent = {0}; aKeyEvent.iScanCode = EStdKeyDevice3; TEventCode aType; aType = EEventKey; HandleKeyEventUaKevEvent. aType) :
[0231] } } iPenDown = false; iPenDrag = false; iPointerEventUp = aPointerEvent; iPointerEventDrag. iPosition.iX = 0; iPointerEventDrag. iPosition.iY = 0; break; default:
[0232] {
[0233] Tint dummy = 1; dummy+ + ;
[0234] > } } void CHintController: :HandleUserTabSwitchEventL()
[0235] { if(ipDrawEngine) ipDrawEngine->ClearCache();
[0236] Tint index = GetActiveViewIndex(); PrepareViewToActivate( index); SetActiveViewBylndex(index); }
[0237] Tint CHintController: :ScrollTimerCallBack(TAny*)
[0238] { return 0;
[0239] }
[0240] TStdScanCode CHintController: :CheckPenDragDirection(const TPointerEvent& aPointerEventDragl, const TPointerEvent& aPointerEventDrag2)
[0241] {
[0242] TStdScanCode direction = EStdKeyNull;
[0243] TPoint delta = aPointerEventDrag2.iPosition - aPointerEventDragl. iPosition; if(delta.iX == 0 && delta. iY == 0)
[0244] { direction = EStdKeyNull;
[0245] > else if(delta.iX >= 0 && delta. iY >= 0)
[0246] { if(delta.iX > delta. iY) direction = EStdKeyRightArrow; else direction = EStdKeyDownArrow;
[0247] } else if(delta.iX >= 0 && delta. iY <= 0)
[0248] { delta. iY = -delta. iY; if(delta.iX > delta. iY) direction = EStdKeyRightArrow; else direction = EStdKeyUpArrow;
[0249] } else if(delta.iX <= 0 && delta. iY <= 0)
[0250] { delta. iX = -delta. iX; delta. iY = -delta. iY; if(delta.iX > delta. iY) direction = EStdKeyLeftArrow; else direction = EStdKeyUpArrow;
[0251] > else if(delta.iX <= 0 && delta. iY >= 0)
[0252] { delta. iX = -delta. iX; if(delta.iX > delta. iY) direction = EStdKeyLeftArrow; else direction = EStdKeyDownArrow;
[0253] } return direction;
[0254] } void CHintController: : DialNumberl_( const TDesC& aPhoneNumber)
[0255] {
[0256] RTelServer server;
[0257] CleanupClosePushLCserver);
[0258] User: : LeaveIfError(server.Connect());
[0259] TName tsy;
[0260] User: : LeaveIfError(server.GetTsyName(0, tsy)) ;
[0261] User: : LeaveIfError(server.LoadPhoneModu!e(tsy));
[0262] Tint numberPhones;
[0263] User: :LeaveIfError(server.EnumeratePhones(numberPhones));<'> if (numberPhones < 1)
[0264] User: : Leave(KErrNotFound);
[0265] RTelServer: :TPhoneInfo info;
[0266] User: : LeaveIfError(server.GetPhoneInfo(0, info));
[0267] RPhone phone;
[0268] CleanupClosePushL( phone);
[0269] User: : LeaveIfError(phone.Open(server, info.iName));
[0270] RPhone: :TLineInfo linelnfo;
[0271] User: : LeaveIfError(phone.GetLineInfo(0, linelnfo));
[0272] RLine line;
[0273] CleanupClosePushL(line);
[0274] User: : LeaveIfError(line.Open(phone, linelnfo. iName));
[0275] TBuf < 100> newCallName;
[0276] RCaII call;
[0277] CleanupClosePushL(call);
[0278] User: : LeaveIfError(call.OpenNewCall(line, newCallName));
[0279] User: :LeaveIfErrorfcall.Dialf aPhoneNumber));
[0280] CleanupStack: :PopAndDestroy(3);
[0281] User: : LeaveIfError(server.UnloadPhoneModule(tsy));
[0282] CleanupStack: :PopAndDestroy(&server); }
[0283] APPENDIX B 2
[0284] const Tint KScrollStep = 20; const Tint KScrollArrow = 5;
[0285] CHintDrawEngine* CHintDrawEngine: :NewL()
[0286] {
[0287] CHintDrawEngine* self = CHintDrawEngine: : NewLC();
[0288] CleanupStack: :Pop(); return self; }
[0289] CHintDrawEngine* CHintDrawEngine: :NewLC()
[0290] {
[0291] CHintDrawEngine* self = new (ELeave) CHintDrawEngineQ;
[0292] CleanupStack: : PushL(self); self->ConstructL(); return self; } void CHintDrawEngine: :Constructl_()
[0293] { ipProjectManager = NULL; ipDisplayCallback = NULL; ipController = NULL; ipArrlmages = new (ELeave) CArrayPtrFlat<CHintImageAdapter> (1);
[0294] }
[0295] CHintDrawEngine: :CHintDrawEngine() : iClientRect(0, 0,0,0)
[0296] { iCrtlmage = -1; iMaxCachedAdapters = 1; iTopLeft.iX = 0; iTopLeft.iY = 0; ibMarkHotSpots = false; ibCenterToCrtHotSpot = true; ibScrollUpBtn = false; ibScrollDownBtn = false; ibScrollLeftBtn = false; ibScrollRightBtn = false;
[0297] }
[0298] CHintDrawEngine: : ~CHintDrawEngine()
[0299] { ipProjectManager = NULL; ipDisplayCallback = NULL; ipController = NULL; if (ipArrlmages)
[0300] { for(TInt idx = 0; idx < ipArrImages->Count(); + + idx) ipArrImages->At(idx)->Cancel(); ipArrImages->ResetAndDestroy(); delete ipArrlmages; ipArrlmages = NULL; } > void CHintDrawEngine: :ClearCache()
[0301] { if (ipArrlmages)
[0302] { for(TInt idx = 0; idx < ipArrImages->Count(); + + idx) ipArrlmages- >At(idx)->Cancel(); ipArrlmages- >ResetAndDestroy (); delete ipArrlmages; ipArrlmages = NULL;
[0303] > iCrtlmage = -1; ipArrlmages = new (ELeave) CArrayPtrFlat<CHintImageAdapter> (1); } void CHintDrawEngine: :SetProject(CHintProjectManager* apHintProjectManager)
[0304] { ipProjectManager = apHintProjectManager;
[0305] > void CHintDrawEngine: :SetController(MHintController* apController)
[0306] { ipController = apController;
[0307] } void CHintDrawEngine: :Update()
[0308] {
[0309] CHintlmageNavigator* pCrtlmageNav = ipProjectManager->GetCrtImgNav(); . TFileName crtlmageName = pCrtImageNav->iImageFileName; Tint idx = 0; for(idx = 0; idx < ipArrImages->Count(); ++idx)
[0310] { if(crtImageName == ipArrImages->At(idx)->GetImageFileName()) break;
[0311] > if(idx == ipArrImages->Count())
[0312] {
[0313] CHintlmageAdapter* plmageAdapter = NULL; plmageAdapter =
[0314] CHintlmageAdapter: :NewLC(NEikonEnvironment: :EikEnv().DefaultDisplayMode()); plmageAdapter- >SetImageFileName(crtImageName); plmageAdapter- >SetDispCallback(ipDisplayCallback); plmageAdapter- >SetEngCallback(this); plmageAdapter- >ExecuteCommandL(EDecodeImage); ipArrImages->AppendL(pImageAdapter); CleanupStack: :Pop(pImageAdapter); iCrtlmage = idx;
[0315] > else
[0316] { iCrtlmage = idx; CheckScrollersO; if(ibCenterToCrtHotSpot)
[0317] CenterToCrtHotSpot(); if(ipDisplayCallback) ipDisplayCallback->Redraw(); } } void CHintDrawEngine: :CenterToCrtHotSpot()
[0318] {
[0319] CHintHotSpot* pSpot = NULL; pSpot = ipProjectManager->GetCrtGallery()->GetCrtHotSpot(); iTopLeft.iX = iClientRect.iTI.iX + iClientRect.Width()/2 - (pSpot->iX + pSpot- >iWidth / 2); iTopLeft.iY = iClientRect.iTI.iY + iClientRect.Height()/2 - (pSpot->iY + pSpot- >iHeight / 2);
[0320] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image());
[0321] Tint nBitmapHeight = bitmap->SizeInPixels().iHeight; if(iTopLeft.iY < = iClientRect.iTI.iY + iClientRect.HeightQ - nBitmapHeight) iTopLeft.iY = iClientRect.iTI.iY + iClientRect.Height() - nBitmapHeight; if(iTopLeft.iY >= iClientRect.iTI.iY) iTopLeft.iY = iClientRect.iTI.iY;
[0322] Tint nBitmapWidth = bit[pi][eta]ap->SizeInPixels().iWidth; if(iTopLeft.iX <= iClientRect.iTI.iX + iClientRect.Width() - nBitmapWidth) iTopLeft.iX = iClientRect.iTI.iX + iClientRect.Width() - nBitmapWidth; if(iTopLeft.iX >= iClientRect.iTI.iX) iTopLeft.iX = iClientRect.iTI.iX; <'>
[0323] > void CHintDrawEngine: :SystemRedraw()
[0324] { if(ipDisplayCallback) ipDisplayCallback->Redraw();
[0325] } void CHintDrawEngine: :ImageReady()
[0326] {
[0327] NormalizeHotSpots(iCrtlmage);
[0328] CenterToCrtHotSpot(); CheckScrollersO; ipController-> ImageReady (); if(ipDisplayCallback) ipDisplayCallback->Redraw();
[0329] } void CHintDrawEngine: :SetDisplayReference(MDisplayCallback* apDisplayRef)
[0330] { ipDisplayCallback = apDisplayRef; if(ipDisplayCallback)
[0331] { ipDisplayCallback->GetWindowClientRect(iClientRect);
[0332] TopLeft = iClientRect.iTI; > } void CHintDrawEngine: :Draw(CWindowGc& gc, const TRect&) const
[0333] { if(iCrtImage == -1) return; if(ipArrImages->At(iCrtImage)->GetErr() ! = KErrNone) return; if(!ipArrImages->At(iCrtImage)->ImageLoaded()) { return;
[0334] >
[0335] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image()); TBool bUseVirtualTI = false; if(ipProjectMa[pi]ager->GetCrtImgNav()->iViewerType == 1)
[0336] { if(iTopLeft.iX > iClientRect.iTI.iX)
[0337] {
[0338] TPoint virtTopLeft(iTopLeft.iX - bitmap->SizeInPixels().iWidth, iTopLeftiY); gc.BitBlt(virtTopLeft, bitmap); bUseVirtualTI = true;
[0339] } gc.BitBlt(iTopLeft, bitmap);
[0340] } else <~> gc.BitBlt(iTopLeft, bitmap); CHintHotSpot* pSpot = NULL; gc.SetPenColor(KRgbRed); if(ibMarkHotSpots)
[0341] { for(TInt idx = 0; idx < ipProjectManager->GetCrtGallery()- >ipArrHotSpots->Count(); ++idx)
[0342] { pSpot = ipProjectManager->GetCrtGallery()->ipArrHotSpots-
[0343] >At(idx); gc.DrawRect( TRect( iTopLeft + TPoint(pSpot->iX, pSpot->iY), TSize(pSpot->iWidth, pSpot->iHeight) ) ); if(bUseVirtualTI)
[0344] {
[0345] TPoint virtTopLeft(iTopLeft.iX - bitmap- >SizeInPixels().iWidth, iTopLeft. iY); gc.DrawRect( TRect( virtTopLeft + TPoint(pSpot->iX, pSpot- >iY), TSize(pSpot->iWidth, pSpot->iHeight) ) );
[0346] } }
[0347] } pSpot = ipProjectManager->GetCrtGallery()->GetCrtHotSpot(); gc.DrawRect( TRect( iTopLeft + TPoint(pSpot->iX - 2, pSpot->iY - 2), TSize(pSpot->iWidth + 4, pSpot->iHeight + 4) ) );
[0348] DrawScrollers(gc); } void CHintDrawEngine: :ScrollUp()
[0349] { if(iTopLeft.iY == iCljentRect.iTI.iY) return; iTopLeft. iY += KScrollStep; if ( iTopLeft. iY >= iClientRect.iTI.iY) iTopLeft. iY = iClientRect.iTI.iY; CheckScrollersO; SystemRedrawQ;
[0350] > void CHintDrawEngine: :ScrollDown() CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image());
[0351] Tint nBitmapHeight = bitmap->SizeInPixels().iHeight; if(iTopLeft.iY = = iClientRect.iTI.iY + iClientRect.Height() - nBitmapHeight) return; iTopLeft.iY -= KScrollStep; if(iTopLeft.iY <= iClientRect.iTI.iY + iClientRect.HeightQ - nBitmapHeight) iTopLeft.iY = iClientRect.iTI.iY + iClientRect.HeightQ - nBitmapHeight; CheckScrollersQ; SystemRedraw();
[0352] } void CHintDrawEngine: :ScrollLeft()
[0353] { if(ipProjectManager->GetCrtImgNav()->iViewerType == 1)
[0354] { iTopLeft.iX += KScrollStep; if(iTopLeft.iX >= iClientRect.Width())
[0355] {
[0356] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image()); Tint nBitmapWidth = bitmap->SizeInPixels().iWidth; iTopLeft.iX = iClientRect.Width() - nBitmapWidth; } } else
[0357] { if(iTopLeft.iX == iClientRect.iTI.iX) return; iTopLeft.iX += KScrollStep; if(iTopLeft.iX >= iClientRect.iTI.iX) iTopLeft.iX = iClientRect.iTI.iX;
[0358] }
[0359] CheckScrollersQ;
[0360] SystemRedrawQ;
[0361] void CHintDrawEngine: :ScrollRight()
[0362] {
[0363] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image()); Tint nBitmapWidth = bitmap->SizeInPixels().iWidth; if(ipProjectManager->GetCrtImgNav()->iViewerType == 1)
[0364] { iTopLeft.iX -= KScrollStep; if(iTopLeft.iX <= iClientRect.WidthQ - nBitmapWidth)
[0365] { iTopLeft.iX = iClientRect.WidthQ;
[0366] } } else
[0367] { if(iTopLeft.iX == iClientRect.iTI.iX + iClientRect.WidthQ - nBitmapWidth) return; iTopLeft.iX -= KScrollStep; if(iTopLeft.iX <= iClientRect.iTI.iX + iClientRect.WidthQ - nBitmapWidth) iTopLeft.iX = iClientRect.iTI.iX + iClientRect.WidthQ - nBitmapWidth; } CheckScrollersQ; SystemRedrawQ; } void CHintDrawEngine: :NormalizeHotSpots(TInt aCrtlmage)
[0368] {
[0369] CFbsBitmap* bitmap = &(ipArrImages->At(aCrtImage)->Image()); Tint nBitmapWidth = bitmap->SizeInPixels().iWidth; Tint nBitmapHeight = bitmap->SizeInPixels().iHeight; if(!nBitmapWidth inBitmapHeight)
[0370] {
[0371] ASSERT(false); return;
[0372] }
[0373] CHintHotSpot* pSpot = NULL; for(TInt idx = 0; idx < ipProjectManager->GetCrtGallery()->ipArrHotSpots- >Count(); + + idx)
[0374] { pSpot = ipProjectManager->GetCrtGallery()->ipArrHotSpots->At(idx); pSpot->iX = TInt(nBitmapWidth * pSpot->iXsReal); pSpot->iY = TInt(nBitmapHeight * pSpot->iYsReai); pSpot->iWidth = TInt(nBitmapWidth * (pSpot->iXeReal - pSpot- >iXsReal)); pSpot->iHeight = TInt(nBitmapHeight * (pSpot->iYeReal - pSpot- >iYsReal));
[0375] > ipProjectManager->GetCrtGallery()->SortTheSpots();
[0376] } void CHintDrawEngine: :SetMarkHotSpots(TBool abMarkThem)
[0377] { ibMarkHotSpots = abMarkThem;
[0378] > void CHintDrawEngine: :CheckScrollers()
[0379] {
[0380] CFbsBitmap* pBitmap = &(ipArrImages->At(iCrtImage)->Image()); if(lpBitmap) return; ibScrollUpBtn = (iTopLeft.iY < iClientRect.iTI.iY); ibScrollDownBtn = (iTopLeft.iY + pBitmap->SizeInPixels().iHeight > iClientRect.iBr.iY); ibScrollLeftBtn = (iTopLeft.iX < iClientRect.iTI.iX); ibScrollRightBtn = (iTopLeft.iX + pBitmap->SizeInPixels().iWidth > iClientRect.iBr.iX); if(ipProjectManager->GetCrtImgNav()->iViewerType == 1)
[0381] { ibScrollLeftBtn = false; ibScrollRightBtn = false; } } void CHintDrawEngine: : DrawScrollers(CWindowGc& gc) const
[0382] {
[0383] TPoint ptOrig = TPoint(iClientRect.iTl.iX, iClientRect.iTI.iY);
[0384] Tint width = iClientRect.WidthQ; Tint height = iClientRect.HeightQ; Tint arrow = KScrollArrow; if(ibScrollLeftBtn) { gc.Drawl_ine(ptOrig + TPoint(0, height/2), ptOrig + TPoint(arrow, height/2 - arrow)); gc.Draw[upsilon]ne(ptOrig + TPoint(0, height/2), ptOrig + TPoint(arrow, height/2 + arrow)); gc.DrawLine(ptOrig + TPoint(arrow, height/2 - arrow), ptOrig + TPoint(arrow, height/2 + arrow));
[0385] > if(ibScrollRightBtn)
[0386] { gc.DrawLine(ptOrig + TPoint(width - arrow, height/2 - arrow), ptOrig + TPoint(width, height/2)); gc.Drawl_ine(ptOrig + TPoint(width - arrow, height/2 + arrow), ptOrig + TPoint(width, height/2)); gc.DrawLine(ptOrig + TPoint(width - arrow, height/2 - arrow), ptOrig + TPoint(width - arrow, height/2 + arrow));
[0387] } if(ibScrollUpBtn)
[0388] { gc.DrawLine(ptOrig + TPoint(width/2 - arrow, arrow), ptOrig + TPoint(width/2, O)); gc.DrawLine(ptOrig + TPoint(width/2, 0), ptOrig + TPoint(width/2 + arrow, arrow)); gc.DrawLine(ptOrig + TPoint(width/2 - arrow, arrow), ptOrig + TPoint(width/2 + arrow, arrow));
[0389] > if(ibScrollDownBtn)
[0390] { gc.Drawl_ine(ptOrig + TPoint(width/2 - arrow, height - arrow), ptOrig +
[0391] TPoint(width/2, height)); gc.DrawLine(ptOrig + TPoint(width/2, height), ptOrig + TPoint(width/2 + arrow, height - arrow)); gc.DrawLine(ptOrig + TPoint(wi[0046] APPENDIX Al
[0047] <?xml version = "1.0" ?> <VirtualTourLocatio[pi]>
[0048] <ImageNavigator>
[0049] <ImageFile>PHOTOS/paddington_map.jpg</ImageFile>
[0050] <ViewerType>.l2D</ViewerType> </ImageNavigator> < Hotspot>
[0051] <Position>0.26 0.688235 0.302 0.750035</Position> <XMLSource>XML/paddington_station_interior.xml</XMLSource>
[0052] <Tip>Paddington Station</Tip> </Hotspot> < Hotspot>
[0053] <Position>0.74 0.370588 0.78 0.432353 </Position>
[0054] <XMLSource>XML/sale_place.xml</XMLSource>
[0055] <Tip>Sale Place</Tip> </Hotspot> <Hotspot>
[0056] <Position>0.67 0.461765 0.712 0.523529</Position>
[0057] <XMLSource>XML/south_wharf_road.xml</XMLSource>
[0058] <Tip>South Wharf</Tip> </Hotspot> <Hotspot>
[0059] <Position>O.558 0.620588 0.6 0.679412</Positio[pi]>
[0060] <XMLSource>XML/st_marys_hospital.xml</XMLSource>
[0061] <Tip>St. Mary's Hospital</Tip> </H[omicron]tspot> <Hotspot>
[0062] <Position>0.346 0.752941 0.388 0.814706</Position>
[0063] <XMLSource>XML/london_street.xml</XMLSource>
[0064] <Tip>London St</Tip> </Hotspot> <Hotspot>
[0065] <Position>O.836 0.220588 0.878 0.282388</Position> <XMLSource>XML/hilton_londo[pi]_metropole.xml </XMLSource>
[0066] <Tip>Hilton London Metropole</Tip> </Hotspot> </VirtualTourLocation>
[0067] APPENDIX A2
[0068] <?xml version = "1.0" ?> <VirtualTourLocation>
[0069] <ImageNavigator>
[0070] <ImageFile>PHOTOS/st_marys_hospital.jpg</ImageFile>
[0071] <ViewerType>Pano</ViewerType>
[0072] < panotype>SPHERE</panotype>
[0073] < pitchRange>-0.231 0.231 </pitchRange>
[0074] <vFov>-O.231 0.231</vFov>
[0075] <initialView>0.00286517 84.7636 26.4649</i[pi]itialView>
[0076] <Autospin>0</Autospin> </ImageNavigator> < Hotspot>
[0077] <XMLSource>XML/south_wharf_road.xml</XMLSource>
[0078] < Position>0.21572 0.730924 0.231289 0.904535</Position>
[0079] <Tip>Praed South Wharf</Tip> </Hotspot> < Hotspot>
[0080] <XMLSource>XML/london_street.xml</XMLSource>
[0081] < Position>0.752424 0.823293 0.767659 O.995984</Position>
[0082] <Tip>Praed London St</Tip> </Hotspot> </VirtualTourLocation>
[0083] APPENDIX A3
[0084] <?xml version = "1.0" ?> <VirtualTourLocation>
[0085] <ImageNavigator>
[0086] <ImageFile>PHOTOS/paddington_station_interior.jpg</ImageFile>
[0087] <ViewerType>Pano</ViewerType>
[0088] <panotype>SPHERE</panotype>
[0089] < pitchRange>-0.236 0.236</pitchRange>
[0090] <vFov>-O.236 0.236</vFov>
[0091] <i[pi]itialView>0.00286517 148.971 27.0379</initialView>
[0092] <Autospin>0</Autospin> </ImageNavigator> <Hotspot>
[0093] <XMLSource>XML/london_street.xml</XMLSource>
[0094] <Position>0.380086 0.650602 0.395028 0.817046</Position>
[0095] <Tip> Walkway To Praed St. </Tip> </Hotspot> <Hotspot>
[0096] <XMLSource>XML/paddington_Ge[pi]Info_meta.xml</XMLSource>
[0097] < Position>0.292291 0.666667 0.308291 O.847667</Position>
[0098] <Tip>META\General Information. txt</Tip> </Hotspot> </VirtualTourLocation> APPENDIX A4
[0099] <?xml version = "1.0" ?> <VirtualTourl_ocation>
[0100] <ImageNavigator>
[0101] <ImageFile>PHOTOS/paddington_GenInfo_meta.jpg</ImageFile>
[0102] <ViewerType>J2D</ViewerType> </ImageNavigator> <Hotspot>
[0103] <XMLSource>XML/paddington_station_interior.xml</XMLSource>
[0104] <Position>0.0148 0.111 0.0529 0.444</Position>
[0105] <Tip> Phone / +44 8457 484950</Tip> </Hotspot> < Hotspot>
[0106] <XML[Xi]ource>XML/paddington_station_i[pi]terior.xml </XMLSource>
[0107] <Position>0.229 0.143 0.2682 0.461 </Position>
[0108] <Tip>Phone / +44 8456 005604</Tip> </Hotspot> < Hotspot>
[0109] <XMLSource>XML/paddington_station_interior.xml</XMLSource>
[0110] <Position>0.403 0.127 0.4423 0.445</Position >
[0111] <Tip>Phone / +44 8456 001515</Tip> </Hotspot> < Hotspot>
[0112] <XMLSource>XML/paddington_station_interior.xml </XMLSource>
[0113] <Position>0.564 0.143 0.6032 0.461</Position>
[0114] <T[iota]p>Phone / +44 8453 303728</Tip> </Hotspot> <Hotspot>
[0115] <XMLSource>XML/paddington_station_interior.xml </XMLSource>
[0116] <Position>O.71 0.111 0.7492 0.444</Position>
[0117] <Tip>Phone / +44 2072 620344</Tip> </Hotspot> <Hotspot>
[0118] <XMLSource>XML/paddington_station_interior.xml </XMLSource>
[0119] < Position>0.852 0.127 0.8914 0.445</Position>
[0120] <Tip>Phone / +44 2072 620344</Tip> </Hotspot> </VirtualTourLocation>
[0121] APPENDIX Bl
[0122] const Tint KMaxPhoneLength = 0x10;
[0123] CHintController: :CHintController(): ipProjectManager(NULL), ipDrawEngine(NULL), ipProjectSniffler(NULL) { }
[0124] CHintController: : ~CHintController()
[0125] { delete ipProjectManager; delete ipProjectSniffler; delete ipDrawEngine; delete iScrollTimer; delete iLogFile; } void CHintController: :Constructl_()
[0126] { ipProjectSniffler = CHintProjectSniffler: :NewL(); if(!ipProjectSniffler->Sniff(KDataDirectoryC)) if( !ipProjectSniffler->Sniff(KDataDirectoryD)) if( !ipProjectSniffler->Sniff(KDataDirectoryE))
[0127] {
[0128] ShowErrorDialog(KNoContentErrorMsgLnl,
[0129] KNoContentErrorMsgLn2);
[0130] ExitApplicationO; return;
[0131] >
[0132] TFileName chosenProjDir; if(!ChooseProjectL(chosenProjDir))
[0133] {
[0134] ExitApplication(); return;
[0135] } ipProjectManager = CHintProjectManager: :NewL(chosenProjDir); ipProjectManager- >LoadVTourL(); ipDrawEngine = CHintDrawEngine: :NewL(); ipDrawEngine- >SetProject(ipProjectMa[pi]ager); ipDrawEngine->SetController(this); iPenDown = false; iPenDrag = false; iPenUp = false; iScrollTimer = CPeriodic: :NewL(CActive: :EPriorityStandard); iPointerEventDown.iPosition.iX = 0; iPointerEventDown.iPosition.iY = 0; iPointerEventDrag.iPosition.iX = 0; iPointerEventDrag.iPosition.iY = 0; iPointerEventUp.iPosition.iX = 0; iPointerEventUp.iPosition.iY = 0; >
[0136] TBool CHintController: :ChooseProjectL(TFileName& chosenProjDir, TBool bAddCrtNb) TBool bOk = true; RArray<TName> projects; CleanupClosePushL(projects); ipProjectSniffler->GetProjects(projects); if(projects.Count() == 1)
[0137] { ipProjectSniffler->GetProjectDir(projects[0], chosenProjDir); CleanupStack: :PopAndDestroy(); return bOk;
[0138] }
[0139] CDesCArrayFlat* items = new(ELeave) CDesCArrayFlat(projects.Count());
[0140] CleanupStack: : PushL(items); for(int i = 0; i < projects. CountQ; i + + )
[0141] {
[0142] TName name; if(bAddCrtNb)
[0143] { name.AppendNum(i + 1); name.Append(_L("\t"));
[0144] } name.Append(projects[i]); items- >AppendL(name);
[0145] }
[0146] Tint nChosenProj = 0; if(GetUserChosenProject(nChosenProj, items)) ipProjectSniffler->GetProjectDir(projects[nChosenProj], chosenProjDir); else bOk = false; items->Reset();
[0147] CleanupStack: :PopAndDestroy(); ' CleanupStack: :PopAndDestroy(); return bOk; }
[0148] TKeyResponse CHintController: :HandleKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
[0149] {
[0150] TKeyResponse keyResponse = EKeyWasConsumed; Tint active = GetActiveViewIndex(); Tint count = GetViewCountQ; if( aType ! = EEventKey) return EKeyWasNotConsumed; TFileName metaFileName; ipProjectManager->GetProjectDirectory(metaFileName); switch (aKeyEvent. iScanCode)
[0151] { case EStdKeyUpArrow: ipDrawEngine->ScrollUp(); break; case EStdKeyDownArrow: ipDrawEngine->ScrollDown(); break; case EStdKeyLeftArrow: ipDrawEngine->ScrollLeft(); break; case EStdKeyRightArrow: ipDrawEngine->ScrollRight(); break; case 49: case 48: case 51:
[0152] { ipDrawEngine->ClearCache(); if(aKeyEvent.iScanCode == 49)
[0153] { active-; active = active < 0 ? count - 1 : active;
[0154] } else
[0155] { active+ + ; active = active % count; >
[0156] Display ViewNameBylndex(active); PrepareViewToActivate(active); SetActiveViewBylndex(active);
[0157] } break; case EStdKeyNkpAsterisk: case 42: case EStdKeyHash: case EStdKeyNkpMinus: ipProjectManager->GetCrtGallery()->inCrtHotSpot = ipProjectManager->GetCrtGallery()->GetNextHotSpot(aKeyEvent.iScanCode == 42 aKeyEvent.iScanCode == EStdKeyNkpAsterisk);
[0158] ShowTooltip(ipProjectManager->GetCrtGallery()- >GetCrtHotSpot()->iTip); ipDrawEngine->Update(); break; case EStdKeyDevice3: if(active == 0)
[0159] { ipDrawEngine->ClearCache(); CHintHotSpot* pCrtHotSpot = ipProjectManager- >GetCrtGallery()->GetCrtHotSpot(); bool bMetaSpot = false; TFileName& tip = pCrtHotSpot->iTip; if(tip.Find(KMetaFileTag) ! = KErrNotFound)
[0160] { bMetaSpot = true; metaFileName. Append (tip);
[0161] MetaViewSetFileNameL(metaFileName);
[0162] }
[0163] TFileName& link = pCrtHotSpot->iLink; if(!ipProjectManager->GalleryIsLoaded(link))
[0164] { ipProjectManager->LoadvTourl_ocationL(li[pi]k); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterTpCrtHotSpot = true;
[0165] > else
[0166] { TFileName& crtGalleryName = ipProjectMa[pi]ager- >GetCrtGallery()->iXMLFileName; if(link != crtGalleryName)
[0167] { <-> ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true- } }
[0168] Tint active = 1; if(bMetaSpot) active = 2;
[0169] DisplayViewNameBylndex(active); SetActiveViewBylndex(active); } else inactive == 1)
[0170] { ipDrawEngine->ClearCache(); CHintHotSpot* pCrtHotSpot = ipProjectManager- >GetCrtGallery()->GetCrtHotSpot(); bool bMetaSpot = false; TFileName& tip = pCrtHotSpot->iTip; if(tip.Fi[pi]d(KMetaFileTag) ! = KErrNotFound)
[0171] { bMetaSpot = true; metaFileName.Append(tip);
[0172] MetaViewSetFileNameL(metaFileName);
[0173] }
[0174] TFileName& link = pCrtHotSpot->iLink; if(!ipProjectManager->GalleryIsLoaded(link))
[0175] { ipProjectManager->LoadVTourLocationL(li[pi]k); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true; if(lbMetaSpot) ipDrawEngine->Update();
[0176] } else !
[0177] {
[0178] TFileNameS. crtGalleryName = ipProjectManager-
[0179] >GetCrtGallery()->iXMLFileName; if(link != crtGalleryName)
[0180] { ipProjectManager->SetCrtGallery(link); ipDrawE[pi]gine->ibCenterToCrtHotSpot = true; if(! bMetaSpot) ipDrawEngine->Update();
[0181] } else
[0182] { keyResponse = EKeyWasNotConsumed;
[0183] } } if(bMetaSpot)
[0184] { active = 2;
[0185] SetActiveViewBylndex(active); } } else if( active == 2 )
[0186] {
[0187] CHintHotSpot* pCrtHotSpot = ipProjectManager- >GetCrtGallery()->GetCrtHotSpot();
[0188] TFileName& tip = pCrtHotSpot->iTip; Tint pos = tip.Find(KMetaPhoneTag); if(pos ! = KErrNotFound) { pos += KMetaPhoneTag().Length(); Tint phoneNbLength = tip.LengthQ - pos; TBuf<KMaxPhoneLength> buf; buf = tip.Right(phoneNbLength); if(!ConfirmDialog(tip, KDialConfMsg)) break;
[0189] TRAPDferr. DialNumberUbun : ): if (err)
[0190] User: :InfoPrint(_L("Error dialing")); break;
[0191] } else if(tip.Find(KMetaEmailTag) I = KErrNotFound)
[0192] { break;
[0193] } } default: keyResponse = EKeyWasNotConsumed;
[0194] } return keyResponse;
[0195] } void CHintController: :PrepareViewToActivate(TInt active)
[0196] { inactive == 0)
[0197] {
[0198] HBufC* locationName = HBufC: :Newl_C(ipProjectManager- >GetCrtGallery()->iXMLFileName.Length());
[0199] *locationName = ipProjectManager->GetCrtGallery()->iXMLFileName; TFileName map; ipProjectManager->GetStartupLocation(map); if(!ipProjectManager->GalleryIsLoaded(map))
[0200] { ipProjectManager->LoadVTourLocationl_(map); ipProjectManager->SetCrtGallery(map); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0201] > else
[0202] { ipProjectManager->SetCrtGallery(map); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0203] >. ipProjectManager->GetCrtGallery()- >SetCurrentHotSpotByLink(*locationName);
[0204] CleanupStack: : PopAndDestroy(locationName);
[0205] } else if(active == 1)
[0206] { CHintHotSpot* pCrtHotSpot = ipProjectManager->GetCrtGallery()- >GetCrtHotSpot();
[0207] TFileName& link = pCrtHotSpot->il_ink; if(!ipProjectManager->GalleryIsLoaded(link))
[0208] { ipProjectManager->LoadVTourLocationL(link); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true; } else
[0209] { ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true; } } else inactive == 2)
[0210] {
[0211] CHintHotSpot* pCrtHotSpot = ipProjectManager->GetCrtGallery()- >GetCrtHotSpot();
[0212] TFileName& tip = pCrtHotSpot->iTip; i
[0213] TFileName& link = pCrtHotSpot->iLink; TFileName metaFileName; ipProjectManager->GetProjectDirectory(metaFileName); metaFileName.Append(tip); MetaViewSetFileNameL( metaFileName);
[0214] MetaViewUseDrawEngine(tip.Find(KMetaFileTag) != KErrNotFound); if(!ipProjectManager->GalleryIsLoaded(link))
[0215] { ipProjectManager->LoadVTourl_ocationL(link); ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0216] } else
[0217] { ipProjectManager->SetCrtGallery(link); ipDrawEngine->ibCenterToCrtHotSpot = true;
[0218] } void CHintController: :HandlePointerEventL(const TPointerEvent& aPointerEvent)
[0219] { switch(aPointerEvent.iType)
[0220] { case TPointerEvent: :EButtonlDown: iPenDown = true; iPenDrag = false; iPointerEventDown = aPointerEvent; iPointerEventDrag = aPointerEvent; break; case TPointerEvent: :EDrag: if([upsilon]PenDown) return; . iPenDrag = true;
[0221] {
[0222] TStdScanCode direction =
[0223] CheckPenDragDirection( iPointerEventDrag, aPointerEvent); switch (direction)
[0224] { case EStdKeyUpArrow: ipDrawEngine->ScrollDown(); break; case EStd Key Down Arrow: ipDrawEngine->ScrollUp(); break; case EStdKeyLeftArrow: ipDrawEngine->ScrollRight(); break; case EStdKeyRightArrow: ipDrawEngine->Scrolll_eft(); break; default: iPenDrag = false; } } iPointerEventDrag = aPointerEvent; break; case TPointerEvent: :EButtonlUp: if(iPenDrag && iScrollTimer && iScrollTimer->IsActive()) iScrollTimer->Cancel(); if([upsilon]PenDrag)
[0225] {
[0226] TPoint imagePos(0,0); ipDrawEngine->ImagePosFromScreenPos(imagePos, aPointerEvent.iPosition);
[0227] Tint nTappedSpot = ipProjectManager->GetCrtGallery()- >GetHotSpotFromPos(imagePos); if( nTappedSpot ! = -1)
[0228] { ipProjectManager->GetCrtGallery()->inCrtHotSpot nTappedSpot;
[0229] ShowTooltip(ipProjectManager->GetCrtGallery()- >GetCrtHotSpot()->iTip); ipDrawEngine->ibCenterToCrtHotSpot = false; ipDrawEngine->Update();
[0230] TKeyEvent aKeyEvent = {0}; aKeyEvent.iScanCode = EStdKeyDevice3; TEventCode aType; aType = EEventKey; HandleKeyEventUaKevEvent. aType) :
[0231] } } iPenDown = false; iPenDrag = false; iPointerEventUp = aPointerEvent; iPointerEventDrag. iPosition.iX = 0; iPointerEventDrag. iPosition.iY = 0; break; default:
[0232] {
[0233] Tint dummy = 1; dummy+ + ;
[0234] > } } void CHintController: :HandleUserTabSwitchEventL()
[0235] { if(ipDrawEngine) ipDrawEngine->ClearCache();
[0236] Tint index = GetActiveViewIndex(); PrepareViewToActivate( index); SetActiveViewBylndex(index); }
[0237] Tint CHintController: :ScrollTimerCallBack(TAny*)
[0238] { return 0;
[0239] }
[0240] TStdScanCode CHintController: :CheckPenDragDirection(const TPointerEvent& aPointerEventDragl, const TPointerEvent& aPointerEventDrag2)
[0241] {
[0242] TStdScanCode direction = EStdKeyNull;
[0243] TPoint delta = aPointerEventDrag2.iPosition - aPointerEventDragl. iPosition; if(delta.iX == 0 && delta. iY == 0)
[0244] { direction = EStdKeyNull;
[0245] > else if(delta.iX >= 0 && delta. iY >= 0)
[0246] { if(delta.iX > delta. iY) direction = EStdKeyRightArrow; else direction = EStdKeyDownArrow;
[0247] } else if(delta.iX >= 0 && delta. iY <= 0)
[0248] { delta. iY = -delta. iY; if(delta.iX > delta. iY) direction = EStdKeyRightArrow; else direction = EStdKeyUpArrow;
[0249] } else if(delta.iX <= 0 && delta. iY <= 0)
[0250] { delta. iX = -delta. iX; delta. iY = -delta. iY; if(delta.iX > delta. iY) direction = EStdKeyLeftArrow; else direction = EStdKeyUpArrow;
[0251] > else if(delta.iX <= 0 && delta. iY >= 0)
[0252] { delta. iX = -delta. iX; if(delta.iX > delta. iY) direction = EStdKeyLeftArrow; else direction = EStdKeyDownArrow;
[0253] } return direction;
[0254] } void CHintController: : DialNumberl_( const TDesC& aPhoneNumber)
[0255] {
[0256] RTelServer server;
[0257] CleanupClosePushLCserver);
[0258] User: : LeaveIfError(server.Connect());
[0259] TName tsy;
[0260] User: : LeaveIfError(server.GetTsyName(0, tsy)) ;
[0261] User: : LeaveIfError(server.LoadPhoneModu!e(tsy));
[0262] Tint numberPhones;
[0263] User: :LeaveIfError(server.EnumeratePhones(numberPhones));<'> if (numberPhones < 1)
[0264] User: : Leave(KErrNotFound);
[0265] RTelServer: :TPhoneInfo info;
[0266] User: : LeaveIfError(server.GetPhoneInfo(0, info));
[0267] RPhone phone;
[0268] CleanupClosePushL( phone);
[0269] User: : LeaveIfError(phone.Open(server, info.iName));
[0270] RPhone: :TLineInfo linelnfo;
[0271] User: : LeaveIfError(phone.GetLineInfo(0, linelnfo));
[0272] RLine line;
[0273] CleanupClosePushL(line);
[0274] User: : LeaveIfError(line.Open(phone, linelnfo. iName));
[0275] TBuf < 100> newCallName;
[0276] RCaII call;
[0277] CleanupClosePushL(call);
[0278] User: : LeaveIfError(call.OpenNewCall(line, newCallName));
[0279] User: :LeaveIfErrorfcall.Dialf aPhoneNumber));
[0280] CleanupStack: :PopAndDestroy(3);
[0281] User: : LeaveIfError(server.UnloadPhoneModule(tsy));
[0282] CleanupStack: :PopAndDestroy(&server); }
[0283] APPENDIX B 2
[0284] const Tint KScrollStep = 20; const Tint KScrollArrow = 5;
[0285] CHintDrawEngine* CHintDrawEngine: :NewL()
[0286] {
[0287] CHintDrawEngine* self = CHintDrawEngine: : NewLC();
[0288] CleanupStack: :Pop(); return self; }
[0289] CHintDrawEngine* CHintDrawEngine: :NewLC()
[0290] {
[0291] CHintDrawEngine* self = new (ELeave) CHintDrawEngineQ;
[0292] CleanupStack: : PushL(self); self->ConstructL(); return self; } void CHintDrawEngine: :Constructl_()
[0293] { ipProjectManager = NULL; ipDisplayCallback = NULL; ipController = NULL; ipArrlmages = new (ELeave) CArrayPtrFlat<CHintImageAdapter> (1);
[0294] }
[0295] CHintDrawEngine: :CHintDrawEngine() : iClientRect(0, 0,0,0)
[0296] { iCrtlmage = -1; iMaxCachedAdapters = 1; iTopLeft.iX = 0; iTopLeft.iY = 0; ibMarkHotSpots = false; ibCenterToCrtHotSpot = true; ibScrollUpBtn = false; ibScrollDownBtn = false; ibScrollLeftBtn = false; ibScrollRightBtn = false;
[0297] }
[0298] CHintDrawEngine: : ~CHintDrawEngine()
[0299] { ipProjectManager = NULL; ipDisplayCallback = NULL; ipController = NULL; if (ipArrlmages)
[0300] { for(TInt idx = 0; idx < ipArrImages->Count(); + + idx) ipArrImages->At(idx)->Cancel(); ipArrImages->ResetAndDestroy(); delete ipArrlmages; ipArrlmages = NULL; } > void CHintDrawEngine: :ClearCache()
[0301] { if (ipArrlmages)
[0302] { for(TInt idx = 0; idx < ipArrImages->Count(); + + idx) ipArrlmages- >At(idx)->Cancel(); ipArrlmages- >ResetAndDestroy (); delete ipArrlmages; ipArrlmages = NULL;
[0303] > iCrtlmage = -1; ipArrlmages = new (ELeave) CArrayPtrFlat<CHintImageAdapter> (1); } void CHintDrawEngine: :SetProject(CHintProjectManager* apHintProjectManager)
[0304] { ipProjectManager = apHintProjectManager;
[0305] > void CHintDrawEngine: :SetController(MHintController* apController)
[0306] { ipController = apController;
[0307] } void CHintDrawEngine: :Update()
[0308] {
[0309] CHintlmageNavigator* pCrtlmageNav = ipProjectManager->GetCrtImgNav(); . TFileName crtlmageName = pCrtImageNav->iImageFileName; Tint idx = 0; for(idx = 0; idx < ipArrImages->Count(); ++idx)
[0310] { if(crtImageName == ipArrImages->At(idx)->GetImageFileName()) break;
[0311] > if(idx == ipArrImages->Count())
[0312] {
[0313] CHintlmageAdapter* plmageAdapter = NULL; plmageAdapter =
[0314] CHintlmageAdapter: :NewLC(NEikonEnvironment: :EikEnv().DefaultDisplayMode()); plmageAdapter- >SetImageFileName(crtImageName); plmageAdapter- >SetDispCallback(ipDisplayCallback); plmageAdapter- >SetEngCallback(this); plmageAdapter- >ExecuteCommandL(EDecodeImage); ipArrImages->AppendL(pImageAdapter); CleanupStack: :Pop(pImageAdapter); iCrtlmage = idx;
[0315] > else
[0316] { iCrtlmage = idx; CheckScrollersO; if(ibCenterToCrtHotSpot)
[0317] CenterToCrtHotSpot(); if(ipDisplayCallback) ipDisplayCallback->Redraw(); } } void CHintDrawEngine: :CenterToCrtHotSpot()
[0318] {
[0319] CHintHotSpot* pSpot = NULL; pSpot = ipProjectManager->GetCrtGallery()->GetCrtHotSpot(); iTopLeft.iX = iClientRect.iTI.iX + iClientRect.Width()/2 - (pSpot->iX + pSpot- >iWidth / 2); iTopLeft.iY = iClientRect.iTI.iY + iClientRect.Height()/2 - (pSpot->iY + pSpot- >iHeight / 2);
[0320] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image());
[0321] Tint nBitmapHeight = bitmap->SizeInPixels().iHeight; if(iTopLeft.iY < = iClientRect.iTI.iY + iClientRect.HeightQ - nBitmapHeight) iTopLeft.iY = iClientRect.iTI.iY + iClientRect.Height() - nBitmapHeight; if(iTopLeft.iY >= iClientRect.iTI.iY) iTopLeft.iY = iClientRect.iTI.iY;
[0322] Tint nBitmapWidth = bit[pi][eta]ap->SizeInPixels().iWidth; if(iTopLeft.iX <= iClientRect.iTI.iX + iClientRect.Width() - nBitmapWidth) iTopLeft.iX = iClientRect.iTI.iX + iClientRect.Width() - nBitmapWidth; if(iTopLeft.iX >= iClientRect.iTI.iX) iTopLeft.iX = iClientRect.iTI.iX; <'>
[0323] > void CHintDrawEngine: :SystemRedraw()
[0324] { if(ipDisplayCallback) ipDisplayCallback->Redraw();
[0325] } void CHintDrawEngine: :ImageReady()
[0326] {
[0327] NormalizeHotSpots(iCrtlmage);
[0328] CenterToCrtHotSpot(); CheckScrollersO; ipController-> ImageReady (); if(ipDisplayCallback) ipDisplayCallback->Redraw();
[0329] } void CHintDrawEngine: :SetDisplayReference(MDisplayCallback* apDisplayRef)
[0330] { ipDisplayCallback = apDisplayRef; if(ipDisplayCallback)
[0331] { ipDisplayCallback->GetWindowClientRect(iClientRect);
[0332] TopLeft = iClientRect.iTI; > } void CHintDrawEngine: :Draw(CWindowGc& gc, const TRect&) const
[0333] { if(iCrtImage == -1) return; if(ipArrImages->At(iCrtImage)->GetErr() ! = KErrNone) return; if(!ipArrImages->At(iCrtImage)->ImageLoaded()) { return;
[0334] >
[0335] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image()); TBool bUseVirtualTI = false; if(ipProjectMa[pi]ager->GetCrtImgNav()->iViewerType == 1)
[0336] { if(iTopLeft.iX > iClientRect.iTI.iX)
[0337] {
[0338] TPoint virtTopLeft(iTopLeft.iX - bitmap->SizeInPixels().iWidth, iTopLeftiY); gc.BitBlt(virtTopLeft, bitmap); bUseVirtualTI = true;
[0339] } gc.BitBlt(iTopLeft, bitmap);
[0340] } else <~> gc.BitBlt(iTopLeft, bitmap); CHintHotSpot* pSpot = NULL; gc.SetPenColor(KRgbRed); if(ibMarkHotSpots)
[0341] { for(TInt idx = 0; idx < ipProjectManager->GetCrtGallery()- >ipArrHotSpots->Count(); ++idx)
[0342] { pSpot = ipProjectManager->GetCrtGallery()->ipArrHotSpots-
[0343] >At(idx); gc.DrawRect( TRect( iTopLeft + TPoint(pSpot->iX, pSpot->iY), TSize(pSpot->iWidth, pSpot->iHeight) ) ); if(bUseVirtualTI)
[0344] {
[0345] TPoint virtTopLeft(iTopLeft.iX - bitmap- >SizeInPixels().iWidth, iTopLeft. iY); gc.DrawRect( TRect( virtTopLeft + TPoint(pSpot->iX, pSpot- >iY), TSize(pSpot->iWidth, pSpot->iHeight) ) );
[0346] } }
[0347] } pSpot = ipProjectManager->GetCrtGallery()->GetCrtHotSpot(); gc.DrawRect( TRect( iTopLeft + TPoint(pSpot->iX - 2, pSpot->iY - 2), TSize(pSpot->iWidth + 4, pSpot->iHeight + 4) ) );
[0348] DrawScrollers(gc); } void CHintDrawEngine: :ScrollUp()
[0349] { if(iTopLeft.iY == iCljentRect.iTI.iY) return; iTopLeft. iY += KScrollStep; if ( iTopLeft. iY >= iClientRect.iTI.iY) iTopLeft. iY = iClientRect.iTI.iY; CheckScrollersO; SystemRedrawQ;
[0350] > void CHintDrawEngine: :ScrollDown() CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image());
[0351] Tint nBitmapHeight = bitmap->SizeInPixels().iHeight; if(iTopLeft.iY = = iClientRect.iTI.iY + iClientRect.Height() - nBitmapHeight) return; iTopLeft.iY -= KScrollStep; if(iTopLeft.iY <= iClientRect.iTI.iY + iClientRect.HeightQ - nBitmapHeight) iTopLeft.iY = iClientRect.iTI.iY + iClientRect.HeightQ - nBitmapHeight; CheckScrollersQ; SystemRedraw();
[0352] } void CHintDrawEngine: :ScrollLeft()
[0353] { if(ipProjectManager->GetCrtImgNav()->iViewerType == 1)
[0354] { iTopLeft.iX += KScrollStep; if(iTopLeft.iX >= iClientRect.Width())
[0355] {
[0356] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image()); Tint nBitmapWidth = bitmap->SizeInPixels().iWidth; iTopLeft.iX = iClientRect.Width() - nBitmapWidth; } } else
[0357] { if(iTopLeft.iX == iClientRect.iTI.iX) return; iTopLeft.iX += KScrollStep; if(iTopLeft.iX >= iClientRect.iTI.iX) iTopLeft.iX = iClientRect.iTI.iX;
[0358] }
[0359] CheckScrollersQ;
[0360] SystemRedrawQ;
[0361] void CHintDrawEngine: :ScrollRight()
[0362] {
[0363] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image()); Tint nBitmapWidth = bitmap->SizeInPixels().iWidth; if(ipProjectManager->GetCrtImgNav()->iViewerType == 1)
[0364] { iTopLeft.iX -= KScrollStep; if(iTopLeft.iX <= iClientRect.WidthQ - nBitmapWidth)
[0365] { iTopLeft.iX = iClientRect.WidthQ;
[0366] } } else
[0367] { if(iTopLeft.iX == iClientRect.iTI.iX + iClientRect.WidthQ - nBitmapWidth) return; iTopLeft.iX -= KScrollStep; if(iTopLeft.iX <= iClientRect.iTI.iX + iClientRect.WidthQ - nBitmapWidth) iTopLeft.iX = iClientRect.iTI.iX + iClientRect.WidthQ - nBitmapWidth; } CheckScrollersQ; SystemRedrawQ; } void CHintDrawEngine: :NormalizeHotSpots(TInt aCrtlmage)
[0368] {
[0369] CFbsBitmap* bitmap = &(ipArrImages->At(aCrtImage)->Image()); Tint nBitmapWidth = bitmap->SizeInPixels().iWidth; Tint nBitmapHeight = bitmap->SizeInPixels().iHeight; if(!nBitmapWidth inBitmapHeight)
[0370] {
[0371] ASSERT(false); return;
[0372] }
[0373] CHintHotSpot* pSpot = NULL; for(TInt idx = 0; idx < ipProjectManager->GetCrtGallery()->ipArrHotSpots- >Count(); + + idx)
[0374] { pSpot = ipProjectManager->GetCrtGallery()->ipArrHotSpots->At(idx); pSpot->iX = TInt(nBitmapWidth * pSpot->iXsReal); pSpot->iY = TInt(nBitmapHeight * pSpot->iYsReai); pSpot->iWidth = TInt(nBitmapWidth * (pSpot->iXeReal - pSpot- >iXsReal)); pSpot->iHeight = TInt(nBitmapHeight * (pSpot->iYeReal - pSpot- >iYsReal));
[0375] > ipProjectManager->GetCrtGallery()->SortTheSpots();
[0376] } void CHintDrawEngine: :SetMarkHotSpots(TBool abMarkThem)
[0377] { ibMarkHotSpots = abMarkThem;
[0378] > void CHintDrawEngine: :CheckScrollers()
[0379] {
[0380] CFbsBitmap* pBitmap = &(ipArrImages->At(iCrtImage)->Image()); if(lpBitmap) return; ibScrollUpBtn = (iTopLeft.iY < iClientRect.iTI.iY); ibScrollDownBtn = (iTopLeft.iY + pBitmap->SizeInPixels().iHeight > iClientRect.iBr.iY); ibScrollLeftBtn = (iTopLeft.iX < iClientRect.iTI.iX); ibScrollRightBtn = (iTopLeft.iX + pBitmap->SizeInPixels().iWidth > iClientRect.iBr.iX); if(ipProjectManager->GetCrtImgNav()->iViewerType == 1)
[0381] { ibScrollLeftBtn = false; ibScrollRightBtn = false; } } void CHintDrawEngine: : DrawScrollers(CWindowGc& gc) const
[0382] {
[0383] TPoint ptOrig = TPoint(iClientRect.iTl.iX, iClientRect.iTI.iY);
[0384] Tint width = iClientRect.WidthQ; Tint height = iClientRect.HeightQ; Tint arrow = KScrollArrow; if(ibScrollLeftBtn) { gc.Drawl_ine(ptOrig + TPoint(0, height/2), ptOrig + TPoint(arrow, height/2 - arrow)); gc.Draw[upsilon]ne(ptOrig + TPoint(0, height/2), ptOrig + TPoint(arrow, height/2 + arrow)); gc.DrawLine(ptOrig + TPoint(arrow, height/2 - arrow), ptOrig + TPoint(arrow, height/2 + arrow));
[0385] > if(ibScrollRightBtn)
[0386] { gc.DrawLine(ptOrig + TPoint(width - arrow, height/2 - arrow), ptOrig + TPoint(width, height/2)); gc.Drawl_ine(ptOrig + TPoint(width - arrow, height/2 + arrow), ptOrig + TPoint(width, height/2)); gc.DrawLine(ptOrig + TPoint(width - arrow, height/2 - arrow), ptOrig + TPoint(width - arrow, height/2 + arrow));
[0387] } if(ibScrollUpBtn)
[0388] { gc.DrawLine(ptOrig + TPoint(width/2 - arrow, arrow), ptOrig + TPoint(width/2, O)); gc.DrawLine(ptOrig + TPoint(width/2, 0), ptOrig + TPoint(width/2 + arrow, arrow)); gc.DrawLine(ptOrig + TPoint(width/2 - arrow, arrow), ptOrig + TPoint(width/2 + arrow, arrow));
[0389] > if(ibScrollDownBtn)
[0390] { gc.Drawl_ine(ptOrig + TPoint(width/2 - arrow, height - arrow), ptOrig +
[0391] TPoint(width/2, height)); gc.DrawLine(ptOrig + TPoint(width/2, height), ptOrig + TPoint(width/2 + arrow, height - arrow)); gc.DrawLine(ptOrig + TPoint(width/2 - arrow, height - arrow), ptOrig + TPoint(width/2 + arrow, height - arrow));
[0392] } } void CHintDrawEngine: :ImagePosFromScree[pi]Pos(TPoint& almagePos, const TPoint& aScreenPos)
[0393] { almagePos = aScreenPos - iTopLeft; if(iTopLeft.iX > iClientRect.iTI.iX && aScreenPos. iX < iTopLeft. iX)
[0394] {
[0395] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image());
[0396] TPoint virtTopLeft(iTopl_eft.iX - bitmap->SizeInPixels().iWidth, iTopLeft. iY); almagePos = aScreenPos - virtTopLeft; } } dth/2 - arrow, height - arrow), ptOrig + TPoint(width/2 + arrow, height - arrow));
[0392] } } void CHintDrawEngine: :ImagePosFromScree[pi]Pos(TPoint& almagePos, const TPoint& aScreenPos)
[0393] { almagePos = aScreenPos - iTopLeft; if(iTopLeft.iX > iClientRect.iTI.iX && aScreenPos. iX < iTopLeft. iX)
[0394] {
[0395] CFbsBitmap* bitmap = &(ipArrImages->At(iCrtImage)->Image());
[0396] TPoint virtTopLeft(iTopl_eft.iX - bitmap->SizeInPixels().iWidth, iTopLeft. iY); almagePos = aScreenPos - virtTopLeft; } }
Claims (15)
- 対話型画像生成の方法であり、
携帯機器のディスプレイに地図を表示することとであって、前記地図は少なくとも1つのアクティブ領域を含む、ことと、
前記少なくとも1つのアクティブ領域の第1の選択を検知することであって、前記第1の選択は前記携帯機器の入力装置に関連する、ことと、
前記少なくとも1つのアクティブ領域に関連する、視点からの表示画像を表示することであって、前記視点からの表示画像は、少なくとも1つの第2のアクティブ領域を含み、前記視点は、第2の選択に基づいており、前記少なくとも1つの第2のアクティブ領域は前記携帯機器の機能を起動するように構成される、ことと、を含む方法。 - 携帯機器を含む対話型画像生成のシステムであって、
ディスプレイと、
プロセッサとを備え、
前記プロセッサは、前記ディスプレイに地図を描画することであって、前記地図は少なくとも1つのアクティブ領域を含む、ことと、
前記少なくとも1つのアクティブ領域の第1の選択を検知することであって、前記第1の選択は前記携帯機器の入力装置に関連する、ことと、
前記少なくとも1つのアクティブ領域に関連する、視点からの表示画像を表示することであって、前記視点からの表示画像は少なくとも1つの第2のアクティブ領域を含み、前記視点は、第2の選択に基づいており、前記少なくとも1つの第2のアクティブ領域は前記携帯機器の機能を起動するように構成される、ことと、を実行するように構成される、システム。 - コンピュータ装置によって実行された場合に前記コンピュータ装置に処理を行わせる命令を格納するコンピュータ読み取り可能記憶媒体であって、前記処理は、
携帯機器のディスプレイに地図を表示することとであって、前記地図は少なくとも1つのアクティブ領域を含む、ステップと、
前記少なくとも1つのアクティブ領域の第1の選択を検知することであって、前記第1の選択は前記携帯機器の入力装置に関連する、ステップと、
前記少なくとも1つのアクティブ領域に関連する、視点からの表示画像を表示することであって、前記視点からの表示画像は少なくとも1つの第2のアクティブ領域を含み、前記視点は、第2の選択に基づいており、前記少なくとも1つの第2のアクティブ領域は前記携帯機器の機能を起動するように構成される、ステップと、を含むコンピュータ読み取り可能記憶媒体。 - 前記機能は、
通話を開始することと、
テキストを表示することと、
メディアを表示することと、
のうち少なくとも1つを含む、請求項1記載の方法。 - 前記表示画像を表示することは、前記ディスプレイに合うように前記表示画像を正規化することを含む、請求項1記載の方法。
- 前記地図及び前記表示画像はそれぞれXMLファイルに関連する、請求項1記載の方法。
- 前記入力装置は、ライトペン、キーパッドのうち少なくとも1つを含む、請求項1記載の方法。
- 前記機能は、
通話を開始することと、
テキストを表示することと、
メディアを表示することと、
のうち少なくとも1つを含む、請求項2記載のシステム。 - 前記表示画像を表示することは、前記ディスプレイに合うように前記表示画像を正規化することを含む、請求項2記載のシステム。
- 前記地図及び前記表示画像はそれぞれXMLファイルに関連する、請求項2記載のシステム。
- 前記入力装置は、ライトペン、キーパッドのうち少なくとも1つを含む、請求項2記載のシステム。
- 前記機能は、
通話を開始することと、
テキストを表示することと、
メディアを表示することと、
のうち少なくとも1つを含む、請求項3記載のコンピュータ読み取り可能記憶媒体。 - 前記表示画像を表示することは、前記ディスプレイに合うように前記表示画像を正規化することを含む、請求項3記載のコンピュータ読み取り可能記憶媒体。
- 前記地図及び前記表示画像はそれぞれXMLファイルに関連する、請求項3記載のコンピュータ読み取り可能記憶媒体。
- 前記入力装置は、ライトペン、キーパッドのうち少なくとも1つを含む、請求項3記載のコンピュータ読み取り可能記憶媒体。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US10/958,727 US7529552B2 (en) | 2004-10-05 | 2004-10-05 | Interactive imaging for cellular phones |
| US10/958,727 | 2004-10-05 | ||
| PCT/CA2005/001487 WO2006037210A1 (en) | 2004-10-05 | 2005-09-29 | Interactive imaging for cellular phones |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2008516482A JP2008516482A (ja) | 2008-05-15 |
| JP4934045B2 true JP4934045B2 (ja) | 2012-05-16 |
Family
ID=36126210
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2007534980A Expired - Lifetime JP4934045B2 (ja) | 2004-10-05 | 2005-09-29 | 携帯電話の対話型画像生成 |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US7529552B2 (ja) |
| EP (2) | EP1803312B1 (ja) |
| JP (1) | JP4934045B2 (ja) |
| CN (1) | CN101073277B (ja) |
| WO (1) | WO2006037210A1 (ja) |
Families Citing this family (13)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7373017B2 (en) * | 2005-10-04 | 2008-05-13 | Sony Corporation | System and method for capturing adjacent images by utilizing a panorama mode |
| JPWO2005005927A1 (ja) * | 2003-07-10 | 2007-09-20 | 株式会社アプリコット | 道案内システムおよび道案内方法 |
| US7676543B2 (en) * | 2005-06-27 | 2010-03-09 | Scenera Technologies, Llc | Associating presence information with a digital image |
| US20070011171A1 (en) * | 2005-07-08 | 2007-01-11 | Nurminen Jukka K | System and method for operation control functionality |
| US20070083918A1 (en) * | 2005-10-11 | 2007-04-12 | Cisco Technology, Inc. | Validation of call-out services transmitted over a public switched telephone network |
| US8243895B2 (en) * | 2005-12-13 | 2012-08-14 | Cisco Technology, Inc. | Communication system with configurable shared line privacy feature |
| US20070281668A1 (en) * | 2006-05-31 | 2007-12-06 | Cisco Technology, Inc. | Dialing assistant that includes an interface with a geographic display |
| US8687785B2 (en) | 2006-11-16 | 2014-04-01 | Cisco Technology, Inc. | Authorization to place calls by remote users |
| US7990394B2 (en) | 2007-05-25 | 2011-08-02 | Google Inc. | Viewing and navigating within panoramic images, and applications thereof |
| US9477368B1 (en) | 2009-03-31 | 2016-10-25 | Google Inc. | System and method of indicating the distance or the surface of an image of a geographical object |
| KR20110052124A (ko) * | 2009-11-12 | 2011-05-18 | 삼성전자주식회사 | 파노라마 이미지 생성 및 조회 방법과 이를 이용한 휴대 단말기 |
| US10217283B2 (en) | 2015-12-17 | 2019-02-26 | Google Llc | Navigation through multidimensional images spaces |
| US10997761B2 (en) * | 2018-11-09 | 2021-05-04 | Imaginear Inc. | Systems and methods for creating and delivering augmented reality content |
Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH09163460A (ja) * | 1995-12-12 | 1997-06-20 | Sony Corp | 無線電話機の操作支援システム |
| JPH10322436A (ja) * | 1997-05-16 | 1998-12-04 | Kokusai Electric Co Ltd | 電話番号検索システム |
| JP2000076284A (ja) * | 1998-08-31 | 2000-03-14 | Sony Corp | 情報処理装置および方法、並びに提供媒体 |
| JP2002213984A (ja) * | 2001-01-12 | 2002-07-31 | Oojisu Soken:Kk | パノラマ画像による案内システム、中央装置及び端末装置、並びにコンピュータプログラム及び記録媒体 |
| JP2002281496A (ja) * | 2001-03-19 | 2002-09-27 | Sanyo Electric Co Ltd | 画像表示システム、端末装置、コンピュータプログラム及び記録媒体 |
| JP2002288541A (ja) * | 2001-03-28 | 2002-10-04 | Ntt Comware Corp | 広告料課金システム、そのプログラムおよびそのプログラムが記録されたコンピュータ読み取り可能な記録媒体 |
| JP2003241649A (ja) * | 2002-02-14 | 2003-08-29 | Sony Corp | 携帯端末およびそれにおける地図作成方法 |
| JP2004085807A (ja) * | 2002-08-26 | 2004-03-18 | Nikken Office System Kk | 画像配信装置及び方法 |
Family Cites Families (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7321783B2 (en) * | 1997-04-25 | 2008-01-22 | Minerva Industries, Inc. | Mobile entertainment and communication device |
| US6463304B2 (en) * | 1999-03-04 | 2002-10-08 | Openwave Systems Inc. | Application launcher for a two-way mobile communications device |
| US6731316B2 (en) * | 2000-02-25 | 2004-05-04 | Kargo, Inc. | Graphical layout and keypad response to visually depict and implement device functionality for interactivity with a numbered keypad |
| US7138962B2 (en) * | 2000-03-29 | 2006-11-21 | Eric Koenig | Multi-task interactive wireless telecommunications device |
| US20020173344A1 (en) | 2001-03-16 | 2002-11-21 | Cupps Bryan T. | Novel personal electronics device |
| US6938221B2 (en) * | 2001-11-30 | 2005-08-30 | Microsoft Corporation | User interface for stylus-based user input |
| CN2563870Y (zh) * | 2002-07-25 | 2003-07-30 | 北京中电未来通讯技术开发有限公司 | 带pda功能的手机 |
| CN2574121Y (zh) * | 2002-09-17 | 2003-09-17 | 鸿富锦精密工业(深圳)有限公司 | 便携式电子装置 |
| US20040250220A1 (en) * | 2003-06-09 | 2004-12-09 | Mika Kalenius | System, apparatus, and method for navigation in a hypertext document |
| KR100677303B1 (ko) * | 2003-12-26 | 2007-02-05 | 엘지전자 주식회사 | 휴대 단말기 |
| US7031728B2 (en) * | 2004-09-21 | 2006-04-18 | Beyer Jr Malcolm K | Cellular phone/PDA communication system |
-
2004
- 2004-10-05 US US10/958,727 patent/US7529552B2/en not_active Expired - Lifetime
-
2005
- 2005-09-29 EP EP05792218.9A patent/EP1803312B1/en not_active Expired - Lifetime
- 2005-09-29 EP EP19156748.6A patent/EP3557396B1/en not_active Expired - Lifetime
- 2005-09-29 CN CN2005800416957A patent/CN101073277B/zh not_active Expired - Lifetime
- 2005-09-29 JP JP2007534980A patent/JP4934045B2/ja not_active Expired - Lifetime
- 2005-09-29 WO PCT/CA2005/001487 patent/WO2006037210A1/en active Application Filing
Patent Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH09163460A (ja) * | 1995-12-12 | 1997-06-20 | Sony Corp | 無線電話機の操作支援システム |
| JPH10322436A (ja) * | 1997-05-16 | 1998-12-04 | Kokusai Electric Co Ltd | 電話番号検索システム |
| JP2000076284A (ja) * | 1998-08-31 | 2000-03-14 | Sony Corp | 情報処理装置および方法、並びに提供媒体 |
| JP2002213984A (ja) * | 2001-01-12 | 2002-07-31 | Oojisu Soken:Kk | パノラマ画像による案内システム、中央装置及び端末装置、並びにコンピュータプログラム及び記録媒体 |
| JP2002281496A (ja) * | 2001-03-19 | 2002-09-27 | Sanyo Electric Co Ltd | 画像表示システム、端末装置、コンピュータプログラム及び記録媒体 |
| JP2002288541A (ja) * | 2001-03-28 | 2002-10-04 | Ntt Comware Corp | 広告料課金システム、そのプログラムおよびそのプログラムが記録されたコンピュータ読み取り可能な記録媒体 |
| JP2003241649A (ja) * | 2002-02-14 | 2003-08-29 | Sony Corp | 携帯端末およびそれにおける地図作成方法 |
| JP2004085807A (ja) * | 2002-08-26 | 2004-03-18 | Nikken Office System Kk | 画像配信装置及び方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| EP1803312A1 (en) | 2007-07-04 |
| US20060073853A1 (en) | 2006-04-06 |
| EP3557396B1 (en) | 2025-03-26 |
| EP3557396A1 (en) | 2019-10-23 |
| WO2006037210A1 (en) | 2006-04-13 |
| EP1803312B1 (en) | 2019-02-13 |
| US7529552B2 (en) | 2009-05-05 |
| EP1803312A4 (en) | 2012-01-11 |
| JP2008516482A (ja) | 2008-05-15 |
| CN101073277B (zh) | 2012-12-12 |
| CN101073277A (zh) | 2007-11-14 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US11797149B2 (en) | Method of dividing screen areas and mobile terminal employing the same | |
| US9310888B2 (en) | Multimodal layout and rendering | |
| CN100449386C (zh) | 多层显示器和具有这种显示器的终端 | |
| JP4934045B2 (ja) | 携帯電話の対話型画像生成 | |
| US8825090B1 (en) | Communication device | |
| KR20150094478A (ko) | 사용자 단말 장치 및 이의 디스플레이 방법 | |
| GB2357220A (en) | A telecommunication apparatus and method for requesting the download of respective pages of received information from a remote source | |
| US7865215B2 (en) | Magnification of currently selected menu item | |
| US20030038790A1 (en) | Information processing system, input/output apparatus, personal digital assistant, and display apparatus | |
| US20080254783A1 (en) | Mobile terminal and method for displaying image according to call therein | |
| US9098194B2 (en) | Keypad of mobile terminal and display method thereof | |
| KR100541192B1 (ko) | 화상정보를 수신하기 위한 무선 단말기 및 그 방법 | |
| CN110245206B (zh) | 地图样式的获取方法、装置、服务器、终端及存储介质 | |
| JP2007180951A (ja) | 携帯電話 | |
| KR20120114431A (ko) | 고객 서비스의 개선 및 고객 센터의 상담 부하를 줄이기 위한 통신 단말기와 그를 이용한 고객 서비스 운영 시스템 및 고객 서비스 운영 방법 | |
| JP2018005425A (ja) | 表示制御方法、端末、及びプログラム | |
| KR101413980B1 (ko) | 모바일 단말에서 테이블타입 문서의 적응형 편집 방법 및 이를 위한 테이블타입 문서 적응형 편집 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 | |
| KR20140089714A (ko) | 상태 바를 변경하는 모바일 장치 및 그 제어 방법 | |
| KR102091140B1 (ko) | 서비스를 제공하는 방법 및 그 장치 | |
| CA2532123C (en) | Magnification of currently selected menu item | |
| KR101196742B1 (ko) | 이동통신 단말기에서 다차원 그래픽을 이용하는 계층적인유저인터페이스 제공 장치 및 방법 | |
| KR101549552B1 (ko) | 휴대 단말기 및 그 동작 제어방법 | |
| KR20090024416A (ko) | 휴대 단말기 및 휴대 단말기의 기능 실행 방법 | |
| JP2009003296A (ja) | クライアント装置、サーバベースコンピューティングシステムおよびプログラム | |
| KR101145020B1 (ko) | 이동 통신 단말기에서의 달력을 이용한 정보 제공 방법 및상기 방법을 수행하는 이동 통신 단말기 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080704 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100806 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100831 |
|
| A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20101026 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20101125 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20101202 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20101228 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110111 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110125 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110331 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110628 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110816 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20111115 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120124 |
|
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120217 |
|
| R150 | Certificate of patent or registration of utility model |
Ref document number: 4934045 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150224 Year of fee payment: 3 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |