Undo-redo is a must-to-have feature in editing programs. This blog post describes how to implement undo-redo in your program. The example taken here is in Java but the concept is very simple and can be implemented easily in any language.
Here is idea to implement the undo-redo. First of all you need these: UndoManager - a class that implements undo-redo features. UserAction - an abstract base class for all user actions.
The operations in the UndoManager are: undo, redo, canUndo, canRedo, addAction And the operations in UserAction are: perform, undo
As said above, the UserAction abstracts user actions which user can undo. For example in text editing program, inserting a character at a particular cursor location is an action which user can undo. So you need to implement this abstract class for all type of user's undo-able actions.
Lets start with some real code. The code here is taken from an Android app "Scratchpad" .
This is a simple drawing program using touch. User can draw on the screen using touch dragging on Android tablet screen. So the user action,in this case, is draw a stroke on canvas. A stroke is defined as the drawing done between users actions of starting touch drag and stopping touch drag. Here is UndoManager class:
The code for UserAction Here is code for StrokeAction Whenever the user completes a drawing stroke in Scratchpad, an object of DrawingAction is created. The ObjectManager in the code above contains the all stroke objects. Whenever user performs a drawing, we add the stroke to object manager. The drawing of all available objects are managed ObjectManager. And when user wants to undo, we simply remove the stroke from object manager. For simplicity and readability, I am not adding the code of ObjectManager here.
The code of UndoManager and UserAction is very generic and can be used any application. UserActions has to be implemented for for each undo-able user action type. This implementation will be application dependent.
Here is idea to implement the undo-redo. First of all you need these: UndoManager - a class that implements undo-redo features. UserAction - an abstract base class for all user actions.
The operations in the UndoManager are: undo, redo, canUndo, canRedo, addAction And the operations in UserAction are: perform, undo
As said above, the UserAction abstracts user actions which user can undo. For example in text editing program, inserting a character at a particular cursor location is an action which user can undo. So you need to implement this abstract class for all type of user's undo-able actions.
Lets start with some real code. The code here is taken from an Android app "Scratchpad" .
This is a simple drawing program using touch. User can draw on the screen using touch dragging on Android tablet screen. So the user action,in this case, is draw a stroke on canvas. A stroke is defined as the drawing done between users actions of starting touch drag and stopping touch drag. Here is UndoManager class:
The code for UserAction Here is code for StrokeAction Whenever the user completes a drawing stroke in Scratchpad, an object of DrawingAction is created. The ObjectManager in the code above contains the all stroke objects. Whenever user performs a drawing, we add the stroke to object manager. The drawing of all available objects are managed ObjectManager. And when user wants to undo, we simply remove the stroke from object manager. For simplicity and readability, I am not adding the code of ObjectManager here.
The code of UndoManager and UserAction is very generic and can be used any application. UserActions has to be implemented for for each undo-able user action type. This implementation will be application dependent.
ReplyDeleteHi, This is Jamuna from Chennai. I have read your blog and I got some knowledgeable information through this blog. Really useful blog. Keep update your blog.
Regards...
Java Training Chennai
Thank You for sharing your article. I like it. It is great information about Java. We provides TIBCO Online Training in Hyderabad.
ReplyDeleteI have completely read your post and the content is crisp and clear.Thank you for posting such an informative article, I have decided to follow your blog so that I can myself updated.
ReplyDeleteJava Training in Chennai
I completely read your blog.It is very useful to me .I have imporve my coading knowledge. Thanks for sharing. Keep sharing more blogs.
ReplyDeleteSoftware Testing Training in chennai
I found your blog while searching for the updates in Selenium WebDriver,I am happy to be here. Very useful content and also easily understandable providing.. Believe me I did wrote an post about selenium tutorials for beginners with reference of your blog.
ReplyDeleteThanks for such a knowledgeable post.We provide Best SEO services in Bangalore,India.
ReplyDeleteBest SEO Company Bangalore
low cost seo plans
Online Marketing Services in bangalore
I used to write critical essays about these platforms using useful info about writing critical analysis essays and I must say that I was surprised that these system have such high security level.
ReplyDeleteThanks for sharing wonderful information which helps all audience
ReplyDeletedevOps Training | devOps supports
Extraordinary occupation for distributed such a gainful site. Your web log isn't just helpful however it is furthermore truly innovative as well. There have a tendency to be relatively few individuals who can surely compose not all that straightforward posts that imaginatively. Proceed with the decent written work Tax Enquiry Accounts
ReplyDeleteMuch obliged to you again for all the information you distribute,Good post. I was exceptionally keen on the article, it's entirely rousing I ought to concede. I like going to you site since I generally run over fascinating articles like this one.Great Job, I incredibly acknowledge that.Do Keep sharing! Respects, HMRC Tax Investigation Accountants
ReplyDeleteI"ve been surfing online over three hours today, yet I never discovered any fascinating article like yours. It"s really sufficiently worth for me. As I would like to think, if all website admins and bloggers made great substance as you did, the web will be significantly more valuable than any other time in recent memory. Tax Enquiry
ReplyDeleteOn the off chance that more individuals that compose articles truly fretted about composing incredible substance like you, more perusers would be occupied with their works. Much obliged to you for thinking about your substance. Let Campaign Tax Enquiry
ReplyDeletei do a lot of article submissions in a week or two and i hire some writers from india and other countries to do my stuf,. Tax Investigation Self Employed
ReplyDeleteExtraordinary occupation for distributed such a gainful site. Your web log isn't just helpful however it is furthermore truly innovative as well. There have a tendency to be relatively few individuals who can surely compose not all that straightforward posts that imaginatively. Proceed with the decent written work Let Campaign Tax Enquiry Accountants
ReplyDeleteHey! A debt of gratitude is in order for the colossal data you havr gave! You have touched on crucuial focuses! Let Property Campaign
ReplyDeleteUseful blog, This is what I have looked for. Share more like this.
ReplyDeleteData Science Course in Chennai
Data Analyst Course in Chennai
Data Science Training in Adyar
Data Science course in Velachery
Angularjs Training in Chennai
RPA Training in Chennai
I am upbeat to discover this post exceptionally helpful for me, as it contains part of data. I generally want to peruse the quality substance and this thing I found in you post. A debt of gratitude is in order for sharing. Let Property Campaign Accountants
ReplyDelete
ReplyDeleteorganic cold pressed oils
natural cold pressed oils
organic oil
natural oil
pure herbal oil
ayurvedic oil store in jaipur
ayurvedic oil
Nice Post. Looking for more updates from you. Thanks for sharing.
ReplyDeleteEthical Hacking Course in Chennai
Hacking Course in Chennai
IELTS coaching in Chennai
IELTS Training in Chennai
Spoken English Classes in Chennai
Best Spoken English Classes in Chennai
Spoken English Class in Chennai
Thanks for sharing this post.Keep sharing more like this.
ReplyDeletedgreatwallofchina
Education
Thanks for the information, Get the best Java Training in Chennai from hope tutors.
ReplyDeleteAmazing information,thank you for your ideas.after along time i have studied
ReplyDeletean interesting information's.we need more updates in your blog.
Selenium Training in Amjikarai
Selenium Training Institutes in Vadapalani
Selenium training near me
Selenium Training in Chennai
Very informative post! Thanks for sharing this wonderful article. Looking forward for more posts from you.
ReplyDeleteEmbedded System Course Chennai | Embedded systems Training in Chennai | Embedded Training in Chennai | Embedded course in chennai | Embedded courses in chennai | Embedded Systems Course | Embedded systems courses in chennai | Embedded Training institutes in chennai | Embedded Training institute in chennai | Embedded systems Training | Embedded course | Embedded Training
This is the kind of data I've long been attempting to discover. Much obliged to you for composing this data. Buy to Let Property Tax Advisors
ReplyDeleteI am happy you take pride in what you compose. This makes you stand way out from numerous different authors that push ineffectively composed substance. high DA backlinks
ReplyDeleteThanks for sharing this unique information with us. Your post is really awesome. Your blog is really helpful for me..
ReplyDeleteorganic oil
organic oil in jaipur
organic cold pressed oils
ayurvedic oil store in jaipur
Ani international provide the security solutions for all kind of secruity system and other equipment.
ReplyDeleteHome security system in jaipur
Wireless Home Security System in jaipur
Realtime attendance machine in jaipur
CCTV Camera dealer in jaipur
Hikvision DVR in jaipur at Rajasthan
security system solutions in jaipur
website design in jaipur
website development company in jaipur
seo company in jaipur
Is it alright to post some portion of this on my site essentially present a hyperlink on this page? high DA backlinks
ReplyDeleteIncredible post I might want to thank you for the endeavors you have made in composing this fascinating and learned article. Buy to Let Tax Advisor
ReplyDeleteplz any one can help with the code how to add undo redo function using bitmap
ReplyDeleteMuch obliged to you for some other educational web journal. Where else would I be able to understand that sort of data written in such a perfect means? I have a mission that I'm a little while ago chipping away at, and I have been at the post for such data. Buy to Let Property Tax Advice London
ReplyDeleteYour site is truly cool and this is an awesome rousing article. Much obliged to you to such an extent. Property Tax Accountant
ReplyDeleteUseful blog admin, I really learned a lot from your blog. Share more like this.
ReplyDeletePython Training in Chennai
Python course in Chennai
AWS Training in Chennai
DevOps Training in Chennai
R Programming Training in Chennai ccna Training in Chennai
ccna course in Chennai
This is really the sort of data I have been attempting to discover. Much thanks to you for composing this data. Property Tax Advice
ReplyDeleteA debt of gratitude is in order For sharing this Superb article.I utilize this Article to demonstrate my task in college.it is helpful For me Great Work. Property Tax Advisors
ReplyDeleteI cherish the way you compose and share your corner! Exceptionally intriguing and distinctive! Keep it coming! Tax on Buy to Let Property
ReplyDeleteI adore this online journal!! The glimmer up the top is wonderful!! Tax Investigation Accountants
ReplyDeleteFantastic article. Exceptionally fascinating to peruse. I truly love to peruse such a decent article. Much obliged! continue shaking. Tax Investigation Advisors
ReplyDeleteI am glad to discover this post Very valuable for me, as it contains part of data. I Always like to peruse The Quality and happy I discovered this thing in you post. Much appreciated Tax Investigation Self Assessment
ReplyDeleteGoodness, cool post. I"d like to compose like this as well – requiring significant investment and genuine diligent work to make an incredible article… yet I put things off an excessive amount of and never appear to begin. Much obliged however. Tax Investigation Specialists
ReplyDeleteA debt of gratitude is in order for your post. I've been contemplating composing an exceptionally equivalent post in the course of the last couple of weeks, I'll most likely keep it quick and painless and connection to this rather if thats cool. Much obliged. www.smartphones-pliable.fr
ReplyDeleteWow good to read thanks for posting
ReplyDeleteBest R programming training in chennai
Incredible learning, do anybody mind only reference back to it Tax Investigation Accountants
ReplyDeletei read a great deal of stuff and i found that the method for composing to clearifing that precisely need to say was great so i am awed and ilike to come back again in future.. Tax Investigation Advisors
ReplyDeleteMuch obliged to you again for all the information you distribute,Good post. I was exceptionally keen on the article, it's very motivating I ought to concede. I like going to you site since I generally go over intriguing articles like this one.Great Job, I incredibly acknowledge that.Do Keep sharing! Respects, Tax Investigation Specialists
ReplyDeleteIf you don't mind proceed with this extraordinary work and I anticipate a greater amount of your marvelous blog entries. Tax Investigation Self Assessment
ReplyDeleteI'm happy to see the considerable point of interest here!. Tax Investigation Self Employed
ReplyDeleteYour site is truly cool and this is an awesome motivating article. Much obliged to you to such an extent. Revenue Tax Investigation
ReplyDeleteThis was a truly awesome challenge and ideally I can go to the following one. It was alot of fun and I truly had a ball.. Tax Investigation Accountants
ReplyDeleteThe Project Management Institute (PMI)is a nonprofit membership association and certification body, best known for its Project Management Professional (PMP) credential and the Project Management Body of Knowledge (PMBOK), a collection of best practices and standards for project management.
ReplyDeleteGood job and thanks for sharing such a good blog You’re doing a great job. Keep it up !!
PMP Certification Fees | Best PMP training in chennai |
pmp certification cost in chennai | PMP Certification Training Institutes in Velachery |
pmp certification courses and books | pmp certification requirements |
pmp training centers in chennai | pmp certification requirements
I am unquestionably making the most of your site. You unquestionably have some extraordinary knowledge and awesome stories. Tax Investigation Self Assessment
ReplyDeleteA debt of gratitude is in order for the post and awesome tips..even I additionally imagine that diligent work is the most imperative part of getting achievement.. Profile backlinks
ReplyDeleteI respect this article for the all around scrutinized substance and phenomenal wording. I got so included in this material that I couldn"t quit perusing. I am inspired with your work and ability. Much obliged to you to such an extent. Tax Investigation Specialists
ReplyDeletePositive site, where did u think of the data on this posting? I'm satisfied I found it however, sick be inquiring soon to figure out what extra posts you incorporate. atlanta luxury chauffeur service
ReplyDeleteI enjoy what you guys are usually up too. This sort of clever work and coverage! Keep up the wonderful works guys I’ve added you guys to my blog roll.
ReplyDeleteAWS Course Training in Chennai |Best AWS Training Institute in Chennai
Devops Course Training in Chennai |Best Devops Training Institute in Chennai
Selenium Course Training in Chennai |Best Selenium Training Institute in Chennai
Java Course Training in Chennai | Best Java Training Institute in Chennai
Much obliged to you for setting aside an ideal opportunity to distribute this data extremely valuable! Tax Investigation Accountants
ReplyDeleteIncredible Article it its truly useful and imaginative update us as often as possible with new upgrades. its was truly profitable. much appreciated. Tax Investigation Advisors
ReplyDeleteKindly fill me in as to whether you're searching for an article essayist for your site. You have some truly extraordinary posts and I feel I would be a decent resource. On the off chance that you ever need to take a percentage of the heap off, I'd totally love to compose some material for your web journal in return for a connection back to mine. It would be ideal if you send me an email if intrigued. Much obliged to you! Tax Investigation Self Assessment
ReplyDeleteExtremely fascinating online journal. Alot of online journals I see nowadays don't generally give anything that I'm keen on, however I'm most definately intrigued by this one. Recently felt that I would post and let you know. Tax Investigation Specialists
ReplyDeleteExtremely fascinating online journal. Alot of online journals I see nowadays don't generally give anything that I'm keen on, however I'm most definately intrigued by this one. Recently felt that I would post and let you know. Tax Investigation Specialists
Nice blog, thanks for sharing such useful information and Keep blogging. Well, done...!
ReplyDeletePega Training in Chennai
Pega Developer Training
Advanced Excel Training in Chennai
JMeter Training in Chennai
Power BI Training in Chennai
Tableau Training in Chennai
Job Openings in Chennai
Oracle Training in Chennai
Oracle DBA Training in Chennai
Social Media Marketing Courses in Chennai
Pega Training in Adyar
البعوض عبارة عن أجنحة للحشرات ، صغيرة الحجم ، وتسبب العديد من الأمراض مثل الملاريا والسالمونيلا وغيرها من الأمراض الخطيرة التي قد تؤدي إلى الوفاة ، وليس فقط تغذية البعوض على دم الإنسان قد يتغذى على دم الحيوانات والطيور. افضل شركة مكافحة حشرات
ReplyDeleteشركة مكافحة النمل الابيض بالجبيل
شركة مكافحة حشرات بالجبيل
شركة رش مبيدات بالجبيل
Awesome.
ReplyDeleteroyal palm beach tree service
Nice post.
ReplyDeletekitchen remodel fort worth tx
Thanks for sharing post.
ReplyDeletenatural gas water heaters pembroke pines
helpful post shared.
ReplyDeletepopcorn ceiling removal company near me
Good work.
ReplyDeleterestoration company fort myers fl
Great post.
ReplyDeletehybrid water heaters west palm beach
awesome post.
ReplyDeletefort myers mold remediation
פוסט נחמד. חייב לשתף עם העוקבים שלי.
ReplyDeleteקבוצת גבאי נדלן
great post.
ReplyDeleteהתקנת פרגולה
This comment has been removed by the author.
ReplyDeleteהייתי חייבת לפרגן, תודה על השיתוף
ReplyDeleteקייטרינג לאירוע
רציתי רק לשאול, אפשר לשתף את הפוסט בבלוג שלי?
ReplyDeleteתכשיטי אפולו
כתיבה מעולה, אהבתי. אשתף עם העוקבים שלי.
ReplyDeleteרהיטים לסלון
סגנון כתיבה מרענן, תודה על השיתוף.
ReplyDeleteפינות אוכל נפתחות
הדעות שלי קצת חלוקות בעניין הזה אבל ללא ספק כתבת מעניין מאוד.
ReplyDeleteעיניים שקועות
valueable post.
ReplyDeleteעמוד לטלוויזיה
מעולה. תודה על הכתיבה היצירתית.
ReplyDeleteבייביזמול
אין ספק שהפוסט הזה דורש שיתוף. תודה.
ReplyDeleteהשקעה בנדלן בחול
Good writeup, I am normal visitor of ones blog, maintain up the excellent operate, and It's going to be a regular visitor for a lengthy time.123Movies
ReplyDelete"I am actually glad to glance at this website posts which carries lots of helpful data,
ReplyDeletethanks for providing these data.
SolarMovies
"
Nice blog, it's so knowledgeable, informative, and good-looking site. myassignmenthelpau is a great platform that has been performing astonishingly well.FMovies
ReplyDeleteExcellent information Providing by your Article. Thanks
ReplyDeletegemcreature
Very Nice post.
ReplyDeleteפרסום בטאבולה
Keep posting love your post.
ReplyDelete123 movie
I really like your post.
ReplyDelete123movie
פוסט נחמד. חייב לשתף עם העוקבים שלי.
ReplyDeleteדחיקת תוצאות שליליות בגוגל
Your article is very informative. Thanks for sharing the valuable information.
ReplyDeleteDevOps Training in Chennai
DevOps Training in Bangalore
DevOps Training in Coimbatore
Best DevOps Training in Marathahalli
DevOps Training Institutes in Marathahalli
DevOps Institute in Marathahalli
DevOps Course in Marathahalli
DevOps Training in btm
DOT NET Training in Bangalore
PHP Training in Bangalore
Your blog is very good to see & thanks for sharing &keep sharing
ReplyDeletedevops training in Hyderabad
Thanks for sharing valuable information...
ReplyDeletePHP Institute in Bangalore
valuable information
ReplyDeleteglobal asset management korea
הדעות שלי קצת חלוקות בעניין הזה אבל ללא ספק כתבת מעניין מאוד.
ReplyDeleteפרסום דיגיטלי לעסקים
כל הכבוד על הפוסט. אהבתי
ReplyDeleteמטבח לילדים
בדיוק מה שחיפשתי. תודה רבה.
ReplyDeleteאיפה כדאי להשקיע כסף
סופסוף מישהו שתואם לדעותיי בנושא. תודה.
ReplyDeleteחברת פיתוח תוכנה
Well I really liked reading it. This tip procured by you is very helpful for accurate planning.Well I really liked reading it. This tip procured by you is very helpful for accurate planning. lgbt là gì
ReplyDeleteInnovative post shared.
ReplyDeleteglobal asset management
Keep on sharing
ReplyDeleteglobal asset management korea
"KUBET - Nhà cái cá cược bóng đá, lô đề, xóc đĩa uy tín nhất năm 2020 - Đăng ký KU BET - KUCASINO - KU CASINO nhận ngay 128K tại KUBET.IO.
ReplyDelete#ku, #kubet, #kucasino, #ku777, #ku888, #ku999, #casino, #kubetio, #keonhacai, #xoso, #lode, #xocdia, #nhacai.
Social KUBET: https://kubet-ku-casino.webflow.io/
https://infogram.com/dang-ky-kubet-cach-tao-lap-tai-khoan-ku-bet-don-gian-1h8j4xglr0od6mv<
https://www.youtube.com/channel/UCyPQbqZIZKV60Q7njSmKe3A
http://trello.com/kubet"
188BET - Link vào 188BET mới nhất không bị chặn bởi nhà mạng 2020 tại 188BET.IO. Đăng ký 188BET ngay hôm nay để nhận ngay quà tặng cực khủng. #188bet, #188betio, #bet188, #casino . https://trello.com/188betio/t
ReplyDeleteI really enjoy reading and also appreciate your work.Keto pills
ReplyDeletewomens fashion
ReplyDeletemovies123
ReplyDeletegreat inspiring article.pretty much pleased with your good work.very helpful information...
ReplyDeleteprescription discount card cvs
Thank you for your post.this post give me lots of advise it is very useful for me.
ReplyDeleteHair salon Brooklyn
I will be interested in more similar topics. i i will be always checking your blog thanks
ReplyDeletewireless backup cameras for cars
הייתי חייבת לפרגן, תודה על השיתוף.
ReplyDeleteהדפסת תמונות על קנבס
nice.
ReplyDeleteמצלמות אבטחה
Nice post. Thanks for sharing this post.
ReplyDeleteאינטרקום לדלת כניסה
123movies. r Completely doesn't have any ads or increase-ons that are damaging to buyers. So you're able to c
ReplyDeleteProvacyl Walmart
ReplyDeleteProvacyl Amazon
Provacyl Gnc
"""TOPSoiCau - Chuyên trang SOI CẦU MB, MT, MN VIP 24h tốt nhất Việt Nam 247 cho anh em tham khảo, lấy số đẹp. Dự đoán kết quả xổ số 3 miền Bắc, Trung, Nam nhanh nhất hàng ngày.
ReplyDeletehttps://stocktwits.com/topsoicau""
Xem thêm: #topsoicau, #soicau, #soicauxsmb, #soicauxsmt, #soicauxsmn, #dudoanxsmb, #dudoanxsmt, #dudoanxsmn, #soicaurongbachkim, #soicauviet, #soicaulotto, #soicaulovip, #soicau3mien, #soicau7777, #soicau247, #soicau555, #soicau366, #soicauwap, #soicau568, #soicau24h, #soicau888, #soicau666, #soicauwin2888, #soicaukubet, #soicaukhongtu
sdsdsd
Website: TOPSoiCau.com
"""
"Taxitaithanhhung.vn- Website chuyên cung cấp dịch vụ chuyển nhà trọn gói tại Hải Phòng - chuyển nhà tại Hải Phòng - chuyển nhà Hải Phòng giá rẻ.
ReplyDeletehttps://www.ko-fi.com/post/Dich-vu-chuyen-nha-tai-Hai-Phong--0915-388-666-J3J81TFJP https://sketchfab.com/chuyennhahaiphong
Website chuyển nhà Thành Hưng:Taxitaithanhhung.vn
Từ khóa chuyển nhà: #chuyennhasgthanhhung
#chuyennhahaiphong
#chuyennhatrongoihaiphong
#chuyennhataihaiphong
#chuyennhahaiphonggiare
#dichvuchuyennhahaiphong
#vanchuyennhahaiphong
#chuyennhahaiphonguytin
#dichvuchuyennhatrongoihaiphong
"dffdfd
Locally owned and operated roofing business, we are dedicated to quality craftsmanship and outstanding customer service. Our integrity and thoroughness will make your roofing experience a rewarding one.
ReplyDeleteTitan Roofing
nice posting.
ReplyDeleteglobal asset management seoul
valuable information
ReplyDeleteGarage door repair North York
nice posting.
ReplyDeleteGlobal asset management Korea
Radioboss Crack-
ReplyDeleteA lot of people failed at what you accomplished, simply because they were busy finding problems while you were busy finding solutions.
Ableton Live Cracked
ReplyDeleteOpportunity comes to those who quit Waiting and start Looking. Success comes to those who quit Thinking and start Doing. Congratulations for Looking and Doing.
Windows 8 Activator Key
ReplyDeleteYour work speaks volumes of the kind of man you are – efficient, organized and result-oriented.
Nessus Crack With Keygen
ReplyDeleteEven the smallest of jobs well done will take you one step closer towards the success that you have always dreamed about. Keep it up.
3utools CrackYour hard work and effort have paid off! A success well deserved, an occasion worth celebrating! Congratulations!
ReplyDeleteMacbooster Torrent
ReplyDeleteDoing a good job is not always about impressive innovation. Sometimes it is only about doing something with plain dedication.
Smadav Pro Crack
ReplyDeletealent means nothing, while experience, acquired in humility and with hard work, means everything.
Drivermax Pro Crack
ReplyDeleteNot a single effort of yours will go in vain. You will be rewarded for your pain. Your hard work will bring you a lot of gain.
Windows 10 Activator
ReplyDeleteThe highest reward for man’s toil is not what he gets for it, but what he becomes by it.
Smadav Pro Crack
ReplyDeleteThe highest reward for man’s toil is not what he gets for it, but what he becomes by it.
Microsoft Toolkit Final Activator
ReplyDeleteIf Oscars were given for a job well done, I’d nominate you! Congratulations for your fantastic achievement
chuyển nhà trọn gói Thành Hưng
ReplyDeletetaxitaithanhhung042020@gmail.com
https://vnexpress.net/20-nam-taxi-tai-thanh-hung-phuc-vu-khach-hang-4075831.html
"Taxi tải Thành Hưng - xe tải Thành Hưng - Vận tải Thành Hưng dịch vụ vận tải số 1 Việt Nam.
Taxitaithanhhung.vn - công ty cung cấp giải pháp chuyển nhà - chuyển văn phòng trọn gói tại Hà Nội.
#taxitaithanhhungvn #taxitaithanhhung #vantaithanhhung #xetaithanhhung #taxitaihanoi #taithanhhung #taxithanhhung #xeThanhhung #chuyennhathanhhung #thanhhung
Link social :
https://vnexpress.net/20-nam-taxi-tai-thanh-hung-phuc-vu-khach-hang-4075831.html"
"Taxi tải Thành Hưng - xe tải Thành Hưng - Vận tải Thành Hưng dịch vụ vận tải số 1 Việt Nam.
ReplyDeleteTaxitaithanhhung.vn - công ty cung cấp giải pháp chuyển nhà - chuyển văn phòng trọn gói tại Hà Nội.
#taxitaithanhhungvn #taxitaithanhhung #vantaithanhhung #xetaithanhhung #taxitaihanoi #taithanhhung #taxithanhhung #xeThanhhung #chuyennhathanhhung #thanhhung
Link social :ddddddddddddddd
https://vnexpress.net/20-nam-taxi-tai-thanh-hung-phuc-vu-khach-hang-4075831.html"
nice sharing.
ReplyDeletestratford management Tokyo
123Movies is the most popular website for film streaming recently. 123Movies A Famous And Popular Website to Watch Movies Like, movies123, 123 movies. In this post, let’s find out some crucial information about this trending site. ☑️ Watch Free Movies: Putlockerc.to
ReplyDelete123Movies is the most popular website for film streaming recently. 123Movies A Famous And Popular Website to Watch Movies Like, movies123, 123 movies. In this post, let’s find out some crucial information about this trending site. ☑️ Watch Free Movies: Putlockerc.to
ReplyDelete123Movies is the most popular website for film streaming recently. 123Movies A Famous And Popular Website to Watch Movies Like, movies123, 123 movies. In this post, let’s find out some crucial information about this trending site. ☑️ Watch Free Movies: Putlockerc.to
ReplyDelete123Movies is the most popular website for film streaming recently. 123Movies A Famous And Popular Website to Watch Movies Like, movies123, 123 movies. In this post, let’s find out some crucial information about this trending site. ☑️ Watch Free Movies: Putlockerc.to ddsadasdsadsa
ReplyDeleteFMovies - Wacth Free Movies Online - FMoviesF.co. Free Full Movies HD Online just on FMoviesF.co without Register or Sign In . FMoviesF is new site FMovies
ReplyDeleteSome time we never feel what we have done but for other that is big achievement
ReplyDeleteinvestorsdiurnal.com
ReplyDeleteELY WEDDING là công ty cung cấp dịch vụ chụp ảnh cưới Hà Nội giá rẻ hàng đầu việt nam với nhiều mẫu ảnh cưới độc và lạ.
Với nhiều năm kinh nghiệm trong lĩnh vực Media chúng tôi sẽ mang đến cho các bạn những bộ sưu tập ảnh cưới vô cùng độc và lạ
Tên Thương hiệu: Ely Wedding
Địa chỉ : 26 Đường Láng, Ngã Tư Sở, Quận Đống Đa, Hà Nội
Email: weddingely@gmail.com
SĐT: 02435642564
ID: /m/08rqq5
Hệ thống social ely wedding - dịch vụ chụp ảnh cưới tại Hà Nội:
https://sites.google.com/view/ely-wedding
https://elywedding.business.site/
https://ely-wedding.jimdosite.com/
https://elywedding.tumblr.com/
https://www.pearltrees.com/elywedding
Từ khóa tìm kiếm:
#ely #elywedding #anhvienaocuoiely #aocuoiely #chupanhcuoiely #aocuoi #anhvienaocuoi #dichvuchupanhcuoi #dichvuchupanhcuoidep #dichvuchupanhcuoihanoi #dichvuchupanhcuoitrongnha #dichvuchupanhcuoigiare #dichvuchupanhdamcuoi #dichvuchupanhcuoitieccuoi #dichvuchupanhcuoingaycuoi #dichvuchupanhcuoichuyennghiep
Website: ely.com.vn
keep posting
ReplyDeletegarage door repair edmonton
Great article it was such an interesting and informative article.
ReplyDeleteGarage Door Repair Chestermere
Great and nice blog thanks sharing
ReplyDeleteGarage Door Repair Penn Hills
אם כי אני לא מסכים עם כל מה שנכתב, מאמר מעניין
ReplyDeleteאינפיניטי qx70
חשבתי שאתקל בסתם עוד מאמר שטחי. טעיתי.
ReplyDeleteכלב קטן
great work
ReplyDeletegarage door repair etobicoke on
Awesome content
ReplyDeletegarage door repair clarington
wow beautiful! so cute and great pics, lovely memories for future to remember past.
ReplyDeleteGarage door pitt
The blog article very surprised to me! Your writing is good. In this I learned a lot! Thank you!
ReplyDeleteThe blog article very surprised to me! Your writing is good. In this I learned a lot! Thank you!
Great info here
ReplyDeleteTowing Rocky Mount, NC
Great info!
ReplyDeleteHickory Towing
Well written article
ReplyDeleteUFABET
Thanks for the help!
ReplyDeleteConcrete Contractors Charlotte, NC
wow beautiful! so cute and great pics.
ReplyDeletegaragedocdoor.ca
Thanks for sharing very nice post.
ReplyDeleteยูฟ่าเบท 168 vip
Great Article… I love to read your articles because your writing style is too good, its is very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.
ReplyDeleteSpring Boot and Micro services Training in Gurgaon
Java Training in Gurgaon
Java Framawork Training in Gurgaon
Android Training in Gurgaon
Thanks for sharing valuable information.
ReplyDeleteSubsequently, after spending many hours on the internet at last We've uncovered an individual that definitely does know what they are discussing many thanks a great deal wonderful post.
ReplyDeleteGDR Tech Los Angeles
Amazing and interesting photos. really lovely.
ReplyDeleteGarage Door Opener Repair
home shopping
ReplyDeleteAmazing and interesting photos. really lovely.
ReplyDeletegarage door repair southeast edmonton
Xem video hướng dẫn cài đặt hack kubet - hack xóc đĩa - hack game tài xỉu tại kênh youtube chính thức của tool hack kubet Hacku
ReplyDeletehttps://www.youtube.com/watch?v=vVG7Ho8wNMA&t
#hacku, #hacktaixiu,#hackxocdia, #toolhackkubet, #hackkucasino, #hackgamexocdia, #xocdiabip, #hacktaixiu,#hackxocdia /m/033_l8
Mua vé máy bay tại Aivivu, tham khảo
ReplyDeletevé máy bay đi Mỹ bao nhiêu tiền
vé máy bay tết
vé máy bay giá rẻ đi San Francisco
ve may bay di Phap
giá vé máy bay đi Anh
gia ve may bay di Los Angeles
combo vinpearl đà nẵng
combo resort vinpearl nha trang
visa quá cảnh trung quốc
đăng ký cách ly khách sạn
It’s really great post, nice blog..I would like to appreciate your work and would like to tell to my friends.
ReplyDeleteGarage Door Installation Pittsburgh
Like your Posts.Thanks Keep Posting.
ReplyDeletecommercial garage door repair
NIce article this article has been my favorite, interesting and informative article.
ReplyDeletegarage door repair company
You made some good quality points there. I did a search on the topic and found many people will agree with your blog.
ReplyDeletegarage door repair Markham
your site layout is very good
ReplyDeleteדוכני אוכל לאירועים
Spot on with this article, I really think this website needs more attention. I'll probably be back to read more, thanks for the info.
ReplyDeletedryer vent cleaning pittsburgh
I wanted to thank you for this great read. Your blog is one of the finest blog . Thanks for posting this informative article.
ReplyDeleteSan Jose Garage Door Doctor
This amazing post impressed me
ReplyDeletecleveland plumbing repair
Customer experience management software
ReplyDeleteExperience management software allows businesses to measure customer impressions through feedback, seeing how that feedback relates to the business metrics, and analyzing them as one.
Patient case management software
ReplyDeleteUnlike electronic medical records (EMRs) and electronic health records (EHRs), patient management systems help clinicians provide value-based care by improving patient engagement and nurturing patient-provider relationships.
מרתק כמה שלא הבנתי כלום עד שקראתי את המאמר הנפלא הזה
ReplyDeleteאפיון חווית משתמש
Excellent information on your blog, thank you for taking the time to share with us. This code is very useful..
ReplyDeleteHickory Towing
Towing Mount Pleasant SC
Towing Jacksonville NC
Win365 là nhà cái chuyên về casino, bóng đá và Slot game uy tín hàng đầu việt nam năm 2021. Win365vip.org cung cấp link vào nhà cái Win365 nhận ngay 50.000 VNĐ khuyến mãi nhà cái và 3.5 tr VNĐ chơi cá cược bóng đá!
ReplyDeleteTại website Win365.football bạn dễ dàng có thể tìm thấy những link vào Win365 mới nhất được cập nhật thường xuyên. Ngoài ra chúng tôi cũng cung cấp những thông tin hữu ích, mẹo cược và soi kèo bóng đá những trận đấu hấp dẫn và đỉnh cao giúp người chơi tại Win365 dễ dàng nhận định và chiến thắng.
Link truy cập chính thức mới nhất không die: https://win365vip.org/
Hashtag: #win365, #nhacaiwin365, #dailywin365, #win365vip, #win365viporg
This is truly the web service provider I was looking for!
ReplyDeletedoor replacement
There are certainly a lot of details like that to take into consideration.
ReplyDeletegarage door cable repair
A very awesome blog post. We are really grateful for your blog post. You will find a lot of approaches after visiting your post.
ReplyDeleteAustin Garage Doors
Great blog, keeping me from working. All the Best
ReplyDeletegarage door spring replacement
I wanted to thank you for this great read. Your blog is one of the finest blog . Thanks for posting this informative article.
ReplyDeletecentral air conditioning
I wanted to thank you for this great read. Your blog is one of the finest blog . Thanks for posting this informative article.
ReplyDeletekitchen renovation houston
Wow! Thank you! I always wanted to write in my site something like that. Can I take part of your post to my blog?
ReplyDeletereport a scam
I wanted to thank you for this great read. Your blog is one of the finest blog . Thanks for posting this informative article.
ReplyDeletename reputation management
Wow! Thank you! I always wanted to write in my site something like that. Can I take part of your post to my blog?
ReplyDeleteCommercial Appliance Repair
Wow! Thank you! I always wanted to write in my site something like that. Can I take part of your post to my blog?
ReplyDeletereport a scam
http://thietbithinhan.com/
ReplyDeleteGreat blog, keeping me from working. All the Best
ReplyDeleteGutter Installation
Hello, U write some extraordinarily attractive blogs. I always check back here frequently to see if you have updated
ReplyDeletecar lockout service
I like this post, And I figure that they have a great time to peruse this post, they might take a decent site to make an information, thanks for sharing it with me.
ReplyDeleteClear Water
מאמר מצוין נהניתי מכל רגע של קריאה
ReplyDeleteעיצוב גבות
Hello, U write some extraordinarily attractive blogs. I always check back here frequently to see if you have updated
ReplyDeleteRolling Steel Doors
This is a wonderful article, Given so much info in it, These type of articles keeps the user's interest in the website.
ReplyDeletemobile locksmith
Cool blog you got here and thank you for the valuable info.
ReplyDeletecar key replacement
You made some good quality points there. I did a search on the topic and found many people will agree with your blog.
ReplyDeleteglobal asset management scam
So lucky to come across your excellent blog. Your blog brings me a great deal of fun. Good luck with the site. Commercial Locksmith in Markham
ReplyDeleteHello, U write some extraordinarily attractive blogs. I always check back here frequently to see if you have updated
ReplyDeletecar locksmith
Very Nice Blog…Thanks for sharing this information with us. Here am sharing some information about training institute.
ReplyDeletedevops training in hyderabad
Baccarat - Best Tips & Tricks | Play Online for Free
ReplyDeleteBaccarat 바카라사이트 is a simple game that involves a wide variety of rules. Players choose five numbers and then they are dealt two to three on 제왕카지노 a 더킹카지노 row. Baccarat is a
Thanks for sharing this blog. It was so informative.
ReplyDeleteBest java coaching centre in chennai
Best java institute in chennai
Really Good Work Done By You...However, stopping by with great quality writing, it's hard to see any good blog today.
ReplyDeletefullzversionpro.org
cracksoftwarefreedownload.com
Anni Crack
WinISO CRACK
Really Good Work Done By You...However, stopping by with great quality writing, it's hard to see any good blog today.
ReplyDeletePRCrack
Bplan Data Recovery Software CRACK