------=_Part_3226_21324053.1232247119576 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline > Any suggestions on how to proceed? If other people agree with me, > perhaps we can get a patch into Qt to allow for this behaviour. The goal is to keep the content in each column readable when resizing the sections. This requires some input to the header view about the minimum width for each column and also an 'aesthetically pleasant' distribution of widths between them. For a commercial project* I implemented a 'stretchy' header view widget which sets the initial sizes based on ratios between the various sections and then adjusts the proportions, rather than the actual widths, when the user resizes columns. This is pretty much the same as the 'stretch factor' concept which Qt layouts have. This means that: - Most importantly, the default column widths can be set for each column in a way which works with different screen and font sizes - It keeps a decent amount of the content visible when resizing but prevents columns being undesirably squished Implementation attached. To use it, replace the existing QHeaderView widgets in the tableview with a StretchHeaderView instance and then call header->setStretchFactor() for each column to set ratios between QHeaderView columns. Works the same way as setStretchFactor() in Qt layouts. Regards, Robert. * see www.mendeley.com 2009/1/18 John Tapsell : Any suggestions on how to proceed? If other people agree with me, perhaps we can get a patch into Qt to allow for this behaviour. > Hi all, > > It's very difficult for a user to use a QHeaderView. Press ctrl+esc > to bring up the task manager thing, then try to enlarge, say, the CPU > column. Doing so shrinks the column next to, so the user then has to > enlarge that column to fix it. Then the user has to fix the column > next to _that_, and so on. Trying to englarge a single column > requires about 5 operations! > > Shrinking a column has a different behaviour though - it causes the > last column (set to stretch) to grow. So if you just enlarge the CPU > column then shrink it again back to its original size, you then have > to do about 5 operations to fix the size of all the other columns > again. > > I think the ideal behaviour is that both grow and shrink should > shrink/grow the last stretched column only. > > Dolphin implements this behaviour by reimplementing QHeaderView, but > Peter Penz says that this took a lot of work to do. > > Any suggestions on how to proceed? If other people agree with me, > perhaps we can get a patch into Qt to allow for this behaviour. > > > JohnFlux > ------=_Part_3226_21324053.1232247119576 Content-Type: text/x-chdr; name=StretchHeaderView.h Content-Transfer-Encoding: base64 X-Attachment-Id: f_fq33xxp70 Content-Disposition: attachment; filename=StretchHeaderView.h I2lmbmRlZiBIRUFERVJWSUVXX0gKI2RlZmluZSBIRUFERVJWSUVXX0gKCiNpbmNsdWRlIDxRdENv cmUvUVZhckxlbmd0aEFycmF5PgojaW5jbHVkZSA8UXRHdWkvUUhlYWRlclZpZXc+CgovKioKICog QSBoZWFkZXItdmlldyB3aGljaCBwcm92aWRlcyBhdXRvbWF0aWMgcHJvcG9ydGlvbmFsIHJlc2l6 aW5nIG9mCiAqIHNlY3Rpb25zIHdoZW4gdGhlIGNvbnRhaW5pbmcgdmlldyBpcyByZXNpemVkLgog KgogKiBAYXV0aG9yIFJvYmVydCBLbmlnaHQgPHJvYmVydC5rbmlnaHRAbWVuZGVsZXkuY29tPgog Ki8KY2xhc3MgU3RyZXRjaEhlYWRlclZpZXcgOiBwdWJsaWMgUUhlYWRlclZpZXcKewoJUV9PQkpF Q1QKCglwdWJsaWM6CgkJU3RyZXRjaEhlYWRlclZpZXcoUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0 aW9uLCBRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKCQkKCQkvLy8gU2V0IHRoZSBtaW5pbXVtIHNpemUg d2hpY2ggc2VjdGlvbiBAcCBsb2dpY2FsSW5kZXggd2lsbAoJCS8vLyBiZSBhdXRvbWF0aWNhbGx5 IHJlc2l6ZWQgdG8gd2hlbiB0aGUgdmlldyBzaXplIGNoYW5nZXMKCQl2b2lkIHNldE1pbmltdW1T ZWN0aW9uU2l6ZShpbnQgbG9naWNhbGluZGV4LCBpbnQgbWluU2l6ZSk7CgkJLy8vIFNlZSBzZXRN aW5pbXVtU2VjdGlvblNpemUoKQoJCWludCBtaW5pbXVtU2VjdGlvblNpemUoaW50IGxvZ2ljYWxJ bmRleCkgY29uc3Q7CgoJCS8qKiAKCQkgKiBTZXQgdGhlIHByb3BvcnRpb25hbCBhbW91bnQgb2Yg c3BhY2Ugd2hpY2ggc2VjdGlvbiBAcCBsb2dpY2FsSW5kZXgKCQkgKiBvZiB0aGUgaGVhZGVyIHdp bGwgYmUgZ2l2ZW4gd2hlbiB0aGUgd2hvbGUgaGVhZGVyIGlzIGF1dG9tYXRpY2FsbHkKCQkgKiBy ZXNpemVkICh1c3VhbGx5IGFzIGEgcmVzdWx0IG9mIHJlc2l6aW5nIHRoZSB2aWV3KQoJCSAqCgkJ ICogQHAgbG9naWNhbEluZGV4IFRoZSBpbmRleCBvZiB0aGUgdmlldyB0byBzZXQgdGhlIHNwYWNp bmcgZm9yCgkJICogQHAgc3RyZXRjaEZhY3RvciBUaGUgYW1vdW50IG9mIHNwYWNlIHRvIGFsbG9j YXRlIHRoZSBzZWN0aW9uLgoJCSAqIFRoZSBmaW5hbCBzaXplIGdpdmVuIHRvIGVhY2ggc2VjdGlv biBpczoKCQkgKgoJCSAqIGF2YWlsYWJsZVNwYWNlICogKHRvdGFsU3RyZXRjaEZhY3RvciAvIHN0 cmV0Y2hGYWN0b3JPZlNlY3Rpb24pCgkJICoKCQkgKiBXaGVyZSAndG90YWxTdHJldGNoRmFjdG9y JyBpcyB0aGUgc3VtIG9mIHN0cmV0Y2ggZmFjdG9ycyBmb3IKCQkgKiBhbGwgc2VjdGlvbnMuICBJ ZiB0aGUgc3RyZXRjaCBmYWN0b3IgZm9yIGEgc2VjdGlvbiBpcyBub3QgCgkJICogZXhwbGljaXRs eSBzZXQsIGl0IGRlZmF1bHRzIHRvIDEuMAoJCSAqLwoJCXZvaWQgc2V0U3RyZXRjaEZhY3Rvcihp bnQgbG9naWNhbEluZGV4LCBxcmVhbCBzdHJldGNoRmFjdG9yKTsKCQkvLy8gU2VlIHNldFN0cmV0 Y2hGYWN0b3IoKQoJCXFyZWFsIHN0cmV0Y2hGYWN0b3IoaW50IGxvZ2ljYWxJbmRleCkgY29uc3Q7 CgoJCS8vLyBSZXR1cm5zIHRydWUgaWYgYSBzYXZlZCBoZWFkZXIgbGF5b3V0IGV4aXN0cyB3aXRo CgkJLy8vIEBwIG5hbWUKCQlib29sIGhhc1NhdmVkU3RhdGUoY29uc3QgUVN0cmluZyYgbmFtZSkg Y29uc3Q7CgkJLy8vIFNhdmVzIHRoZSBjdXJyZW50IGxheW91dCBvZiB0aGUgaGVhZGVyIHVuZGVy IHRoZSBuYW1lCgkJLy8vIEBwIG5hbWUKCQl2b2lkIHNhdmVTdGF0ZShjb25zdCBRU3RyaW5nJiBu YW1lKTsKCQkvLy8gUmVzdG9yZXMgYSBoZWFkZXIgbGF5b3V0IHByZXZpb3VzbHkgc2F2ZWQgd2l0 aCBzYXZlU3RhdGUoKQoJCXZvaWQgcmVzdG9yZVN0YXRlKGNvbnN0IFFTdHJpbmcmIG5hbWUpOwoK CQkvKioKCQkgKiBSZS1pbXBsZW1lbnRlZCBmcm9tIFFIZWFkZXJWaWV3IHRvIHN1cHBvcnQgcmV0 cmlldmluZwoJCSAqIHRoZSBoZWFkZXIgc2VjdGlvbiBzaXplIGFsbG93aW5nIGVub3VnaCByb29t IGZvciB0aGUKCQkgKiBzb3J0IGluZGljYXRvciBldmVuIHRob3VnaCB0aGUgc2VjdGlvbiBkb2Vz bid0IHNob3cKCQkgKiB0aGUgc29ydCBpbmRpY2F0b3IgYXQgdGhlIG1vbWVudC4KCQkgKgoJCSAq IEBwYXJhbSBsb2dpY2FsSW5kZXggVGhlIHNlY3Rpb24gdG8gcmV0cmlldmUgdGhlIHNpemUgb2Yu CgkJICogQHBhcmFtIGFzc3VtZVNvcnRJbmRpY2F0b3IgSW5jbHVkZSB0aGUgc3BhY2UgbmVlZGVk IGJ5IHRoZQoJCSAqIHNvcnQgaW5kaWNhdG9yIGluIHRoZSByZXR1cm5lZCBzaXplIGV2ZW4gaWYg dGhlIHNlY3Rpb24gZG9lc24ndAoJCSAqIGhhdmUgc3VjaCBhbiBpbmRpY2F0b3IgeWV0LgoJCSAq LwoJCVFTaXplIHNlY3Rpb25TaXplRnJvbUNvbnRlbnRzKGludCBsb2dpY2FsSW5kZXgsIAoJCQkJ Ym9vbCBhc3N1bWVTb3J0SW5kaWNhdG9yID0gZmFsc2UpIGNvbnN0OwoKCXByb3RlY3RlZCBRX1NM T1RTOgoJCXZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyaWVzKCk7CgkKCXByaXZhdGUgUV9TTE9U UzoKCQl2b2lkIHNlY3Rpb25TaXplQ2hhbmdlZChpbnQgbG9naWNhbEluZGV4LCBpbnQgb2xkU2l6 ZSwgaW50IG5ld1NpemUpOwoKCXByaXZhdGU6CgkJY2xhc3MgTGF5b3V0Q29uc3RyYWludAoJCXsK CQlwdWJsaWM6CgkJCUxheW91dENvbnN0cmFpbnQoKQoJCQkJOiBtaW5pbXVtU2l6ZSgwKSwKCQkJ CSAgc3RyZXRjaEZhY3RvcigxKSwKCQkJCSAgdXNlclJlc2l6ZWQoZmFsc2UpCgkJCXsKCQkJfQoJ CQlpbnQgbWluaW11bVNpemU7CgkJCXFyZWFsIHN0cmV0Y2hGYWN0b3I7CgkJCS8vIHNldCB0byB0 cnVlIGlmIHRoZSB1c2VyIG1hbnVhbGx5IHJlc2l6ZXMgYSBzZWN0aW9uLAoJCQkvLyBpbiB3aGlj aCBjYXNlIHRoZSAnbWluaW11bVNpemUnIGNvbnN0cmFpbnQgaXMgaWdub3JlZAoJCQlib29sIHVz ZXJSZXNpemVkOwoJCX07IAoKCQlzdHJ1Y3QgU2F2ZWRMYXlvdXQKCQl7CgkJCVFCeXRlQXJyYXkg aGVhZGVyVmlld1N0YXRlOwoJCQlRVmVjdG9yPExheW91dENvbnN0cmFpbnQ+IGNvbnN0cmFpbnRz OwoJCX07CgoJCXZvaWQgZW5zdXJlU2VjdGlvbkNvdW50KGludCBsb2dpY2FsSW5kZXgpOwoJCXZv aWQgdXBkYXRlU3RyZXRjaEZhY3RvcnMoKTsKCgkJYm9vbCBtX2lnbm9yZVNlY3Rpb25SZXNpemVk U2lnbmFsOwoJCVFWZWN0b3I8TGF5b3V0Q29uc3RyYWludD4gbV9sYXlvdXRDb25zdHJhaW50czsK CQlRSGFzaDxRU3RyaW5nLFNhdmVkTGF5b3V0PiBtX3NhdmVkU3RhdGVzOwoKCQlxcmVhbCBtX3Rv dGFsU3RyZXRjaEZhY3RvcjsKCQlRVmFyTGVuZ3RoQXJyYXk8aW50LDE2PiBtX3Zpc2libGVSZXNp emFibGVTZWN0aW9uczsKCQlpbnQgbV9hdmFpbGFibGVTaXplOwoJCWJvb2wgbV91c2VySXNSZXNp emluZzsKfTsKCiNlbmRpZiAvLyBIRUFERVJWSUVXX0gKCg== ------=_Part_3226_21324053.1232247119576 Content-Type: text/x-c++src; name=StretchHeaderView.cpp Content-Transfer-Encoding: base64 X-Attachment-Id: f_fq33yl5l1 Content-Disposition: attachment; filename=StretchHeaderView.cpp CiNpbmNsdWRlICJTdHJldGNoSGVhZGVyVmlldy5oIgoKI2luY2x1ZGUgPFF0RGVidWc+CgpTdHJl dGNoSGVhZGVyVmlldzo6U3RyZXRjaEhlYWRlclZpZXcoUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0 aW9uLCBRV2lkZ2V0KiBwYXJlbnQpCjogUUhlYWRlclZpZXcob3JpZW50YXRpb24scGFyZW50KQos IG1faWdub3JlU2VjdGlvblJlc2l6ZWRTaWduYWwoZmFsc2UpCiwgbV9hdmFpbGFibGVTaXplKDAp CiwgbV91c2VySXNSZXNpemluZyhmYWxzZSkKewoJY29ubmVjdCh0aGlzLFNJR05BTChzZWN0aW9u UmVzaXplZChpbnQsaW50LGludCkpLAoJCQl0aGlzLFNMT1Qoc2VjdGlvblNpemVDaGFuZ2VkKGlu dCxpbnQsaW50KSkpOwp9Cgp2b2lkIFN0cmV0Y2hIZWFkZXJWaWV3OjplbnN1cmVTZWN0aW9uQ291 bnQoaW50IGluZGV4KQp7CglpZiAobV9sYXlvdXRDb25zdHJhaW50cy5jb3VudCgpIDw9IGluZGV4 KQoJewoJCW1fbGF5b3V0Q29uc3RyYWludHMucmVzaXplKGluZGV4ICsgMSk7Cgl9Cn0KCnZvaWQg U3RyZXRjaEhlYWRlclZpZXc6OnNldFN0cmV0Y2hGYWN0b3IoaW50IGxvZ2ljYWxJbmRleCwgcXJl YWwgc3RyZXRjaEZhY3RvcikKewoJZW5zdXJlU2VjdGlvbkNvdW50KGxvZ2ljYWxJbmRleCk7Cglz dHJldGNoRmFjdG9yID0gcU1heCgxLjAsc3RyZXRjaEZhY3Rvcik7CgltX2xheW91dENvbnN0cmFp bnRzW2xvZ2ljYWxJbmRleF0uc3RyZXRjaEZhY3RvciA9IHN0cmV0Y2hGYWN0b3I7CgoJaWYgKCFt X3VzZXJJc1Jlc2l6aW5nKQoJewoJCXNjaGVkdWxlRGVsYXllZEl0ZW1zTGF5b3V0KCk7Cgl9Cn0K CnFyZWFsIFN0cmV0Y2hIZWFkZXJWaWV3OjpzdHJldGNoRmFjdG9yKGludCBsb2dpY2FsSW5kZXgp IGNvbnN0CnsKCWlmIChtX2xheW91dENvbnN0cmFpbnRzLmNvdW50KCkgPj0gbG9naWNhbEluZGV4 KQoJewoJCXJldHVybiAxOwoJfQoJcmV0dXJuIG1fbGF5b3V0Q29uc3RyYWludHNbbG9naWNhbElu ZGV4XS5zdHJldGNoRmFjdG9yOwp9Cgp2b2lkIFN0cmV0Y2hIZWFkZXJWaWV3OjpzZXRNaW5pbXVt U2VjdGlvblNpemUoaW50IGxvZ2ljYWxJbmRleCwgaW50IHNpemUpCnsKCWVuc3VyZVNlY3Rpb25D b3VudChsb2dpY2FsSW5kZXgpOwoJbV9sYXlvdXRDb25zdHJhaW50c1tsb2dpY2FsSW5kZXhdLm1p bmltdW1TaXplID0gc2l6ZTsKfQoKaW50IFN0cmV0Y2hIZWFkZXJWaWV3OjptaW5pbXVtU2VjdGlv blNpemUoaW50IGxvZ2ljYWxJbmRleCkgY29uc3QKewoJaWYgKG1fbGF5b3V0Q29uc3RyYWludHMu Y291bnQoKSA+PSBsb2dpY2FsSW5kZXgpCgl7CgkJcmV0dXJuIDA7Cgl9CglyZXR1cm4gbV9sYXlv dXRDb25zdHJhaW50c1tsb2dpY2FsSW5kZXhdLm1pbmltdW1TaXplOwp9Cgp2b2lkIFN0cmV0Y2hI ZWFkZXJWaWV3Ojp1cGRhdGVHZW9tZXRyaWVzKCkKewoJbV9pZ25vcmVTZWN0aW9uUmVzaXplZFNp Z25hbCA9IHRydWU7CgoJUUhlYWRlclZpZXc6OnVwZGF0ZUdlb21ldHJpZXMoKTsKCWlmIChjb3Vu dCgpID4gMCkKCXsKCQl1cGRhdGVTdHJldGNoRmFjdG9ycygpOwoKCQlmb3IgKGludCBpPTA7IGkg PCBtX3Zpc2libGVSZXNpemFibGVTZWN0aW9ucy5jb3VudCgpOyBpKyspCgkJewoJCQlpbnQgbG9n aWNhbEluZGV4ID0gbV92aXNpYmxlUmVzaXphYmxlU2VjdGlvbnNbaV07CgkJCWNvbnN0IExheW91 dENvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBtX2xheW91dENvbnN0cmFpbnRzW2xvZ2ljYWxJbmRl eF07CgkJCXFyZWFsIHByb3BvcnRpb24gPSBjb25zdHJhaW50LnN0cmV0Y2hGYWN0b3IgLyAocXJl YWwpbV90b3RhbFN0cmV0Y2hGYWN0b3I7CgoJCQlpbnQgcHJlZmVycmVkTmV3V2lkdGggPSBzdGF0 aWNfY2FzdDxpbnQ+KHByb3BvcnRpb24gKiBtX2F2YWlsYWJsZVNpemUpOwoJCQlpbnQgbmV3V2lk dGggPSBjb25zdHJhaW50LnVzZXJSZXNpemVkID8gcHJlZmVycmVkTmV3V2lkdGggOgoJCQkJCQkg ICBxTWF4KHByZWZlcnJlZE5ld1dpZHRoLGNvbnN0cmFpbnQubWluaW11bVNpemUpOwoKCQkJaWYg KG5ld1dpZHRoID4gcHJlZmVycmVkTmV3V2lkdGgpCgkJCXsKCQkJCW1fYXZhaWxhYmxlU2l6ZSAr PSBuZXdXaWR0aCAtIHByZWZlcnJlZE5ld1dpZHRoOwoJCQl9CgkJCXJlc2l6ZVNlY3Rpb24obG9n aWNhbEluZGV4LG5ld1dpZHRoKTsKCQl9Cgl9CgoJbV9pZ25vcmVTZWN0aW9uUmVzaXplZFNpZ25h bCA9IGZhbHNlOwp9Cgp2b2lkIFN0cmV0Y2hIZWFkZXJWaWV3Ojp1cGRhdGVTdHJldGNoRmFjdG9y cygpCnsKCW1fdmlzaWJsZVJlc2l6YWJsZVNlY3Rpb25zLmNsZWFyKCk7CgoJLy8gR2V0IHZpc2li bGUsIHVzZXItcmVzaXplYWJsZSBoZWFkZXIgc2VjdGlvbnMKCWludCBmaXhlZFNlY3Rpb25XaWR0 aCA9IDA7Cglmb3IgKGludCBsb2dpY2FsSW5kZXg9MDsgbG9naWNhbEluZGV4IDwgY291bnQoKTsg bG9naWNhbEluZGV4KyspCgl7CgkJYm9vbCBpc0ZpeGVkID0gcmVzaXplTW9kZShsb2dpY2FsSW5k ZXgpID09IFFIZWFkZXJWaWV3OjpGaXhlZDsKCQlpZiAoIWlzU2VjdGlvbkhpZGRlbihsb2dpY2Fs SW5kZXgpKQoJCXsKCQkJaWYgKGlzRml4ZWQpCgkJCXsKCQkJCWZpeGVkU2VjdGlvbldpZHRoICs9 IHNlY3Rpb25TaXplKGxvZ2ljYWxJbmRleCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQltX3Zpc2li bGVSZXNpemFibGVTZWN0aW9ucy5hcHBlbmQobG9naWNhbEluZGV4KTsKCQkJfQoJCX0KCX0KCgll bnN1cmVTZWN0aW9uQ291bnQoY291bnQoKS0xKTsKCgkvLyBDYWxjdWxhdGUgdG90YWwgYXZhaWxh YmxlIHNwYWNlIGZvciByZXNpemFibGUKCS8vIHNlY3Rpb25zIGFuZCBkaXN0cmlidXRlIGFtb25n c3QgdGhlIHNlY3Rpb25zIGFjY29yZGluZwoJLy8gdG8gdGhlaXIgc3RyZXRjaCBmYWN0b3JzCglt X2F2YWlsYWJsZVNpemUgPSB3aWR0aCgpIC0gZml4ZWRTZWN0aW9uV2lkdGg7CgltX3RvdGFsU3Ry ZXRjaEZhY3RvciA9IDA7Cglmb3IgKGludCBpPTA7IGkgPCBtX3Zpc2libGVSZXNpemFibGVTZWN0 aW9ucy5jb3VudCgpOyBpKyspCgl7CgkJaW50IGxvZ2ljYWxJbmRleCA9IG1fdmlzaWJsZVJlc2l6 YWJsZVNlY3Rpb25zW2ldOwoJCUxheW91dENvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBtX2xheW91 dENvbnN0cmFpbnRzW2xvZ2ljYWxJbmRleF07CgkJY29uc3RyYWludC5zdHJldGNoRmFjdG9yID0g cU1heCgxLjAsY29uc3RyYWludC5zdHJldGNoRmFjdG9yKTsKCQltX3RvdGFsU3RyZXRjaEZhY3Rv ciArPSBjb25zdHJhaW50LnN0cmV0Y2hGYWN0b3I7Cgl9Cn0KCmJvb2wgU3RyZXRjaEhlYWRlclZp ZXc6Omhhc1NhdmVkU3RhdGUoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3QKewoJcmV0dXJuIG1f c2F2ZWRTdGF0ZXMuY29udGFpbnMobmFtZSk7Cn0KCnZvaWQgU3RyZXRjaEhlYWRlclZpZXc6OnNh dmVTdGF0ZShjb25zdCBRU3RyaW5nJiBuYW1lKQp7CglTYXZlZExheW91dCBsYXlvdXQ7CglsYXlv dXQuY29uc3RyYWludHMgPSBtX2xheW91dENvbnN0cmFpbnRzOwoJbGF5b3V0LmhlYWRlclZpZXdT dGF0ZSA9IFFIZWFkZXJWaWV3OjpzYXZlU3RhdGUoKTsKCW1fc2F2ZWRTdGF0ZXMuaW5zZXJ0KG5h bWUsbGF5b3V0KTsKfQoKdm9pZCBTdHJldGNoSGVhZGVyVmlldzo6cmVzdG9yZVN0YXRlKGNvbnN0 IFFTdHJpbmcmIG5hbWUpCnsKCWlmIChtX3NhdmVkU3RhdGVzLmNvbnRhaW5zKG5hbWUpKQoJewoJ CWNvbnN0IFNhdmVkTGF5b3V0JiBsYXlvdXQgPSBtX3NhdmVkU3RhdGVzW25hbWVdOwoJCVFIZWFk ZXJWaWV3OjpyZXN0b3JlU3RhdGUobGF5b3V0LmhlYWRlclZpZXdTdGF0ZSk7CgkJbV9sYXlvdXRD b25zdHJhaW50cyA9IGxheW91dC5jb25zdHJhaW50czsKCX0KfQoKdm9pZCBTdHJldGNoSGVhZGVy Vmlldzo6c2VjdGlvblNpemVDaGFuZ2VkKGludCBsb2dpY2FsSW5kZXgsIGludCBvbGRTaXplLCBp bnQgbmV3U2l6ZSkKewoJLy8gSWdub3JlIHNpemUgY2hhbmdlIHNpZ25hbHMgY29taW5nIGZyb20g dXBkYXRlR2VvbWV0cmllcygpCglpZiAobV9pZ25vcmVTZWN0aW9uUmVzaXplZFNpZ25hbCkKCXsK CQlyZXR1cm47Cgl9CgoJbV91c2VySXNSZXNpemluZyA9IHRydWU7CgoJZW5zdXJlU2VjdGlvbkNv dW50KGxvZ2ljYWxJbmRleCk7Cgl1cGRhdGVTdHJldGNoRmFjdG9ycygpOwoKCW1fbGF5b3V0Q29u c3RyYWludHNbbG9naWNhbEluZGV4XS51c2VyUmVzaXplZCA9IHRydWU7CgoJLy8gV2hlbiB1c2Vy IG1hbnVhbGx5IHJlc2l6ZXMgYSBzZWN0aW9uLCByZS1jYWxjdWxhdGUgdGhlIHN0cmV0Y2gKCS8v IGZhY3RvciBmb3IgdGhlIHNlY3Rpb24gc28gdGhhdCB0aGUgc2VjdGlvbiBhZGp1c3RzIGluIHNp emUKCS8vIHdpdGggdGhlIHByb3BvcnRpb24gZ2l2ZW4gYnkgdGhlIHVzZXIKCXFyZWFsIHByb3Bv cnRpb25hbFNpemUgPSAocXJlYWwpbmV3U2l6ZSAvIG1fYXZhaWxhYmxlU2l6ZTsKCglpZiAocHJv cG9ydGlvbmFsU2l6ZSA+IG1pbmltdW1TZWN0aW9uU2l6ZShsb2dpY2FsSW5kZXgpKQoJewoJCXFy ZWFsIG5ld1N0cmV0Y2hGYWN0b3IgPSBwcm9wb3J0aW9uYWxTaXplICogbV90b3RhbFN0cmV0Y2hG YWN0b3I7CgkJc2V0U3RyZXRjaEZhY3Rvcihsb2dpY2FsSW5kZXgsbmV3U3RyZXRjaEZhY3Rvcik7 Cgl9CgoJbV91c2VySXNSZXNpemluZyA9IGZhbHNlOwp9CgpRU2l6ZSBTdHJldGNoSGVhZGVyVmll dzo6c2VjdGlvblNpemVGcm9tQ29udGVudHMoaW50IGxvZ2ljYWxJbmRleCwgYm9vbCBhc3N1bWVT b3J0SW5kaWNhdG9yKSBjb25zdAp7CgkvLyBjb3BpZWQgYW5kIGFkYXB0ZWQgZnJvbSBRSGVhZGVy Vmlldzo6c2VjdGlvblNpemVGcm9tQ29udGVudHMoKQoJUVN0eWxlT3B0aW9uSGVhZGVyIG9wdDsK ICAgIGluaXRTdHlsZU9wdGlvbigmb3B0KTsKICAgIG9wdC5zZWN0aW9uID0gbG9naWNhbEluZGV4 OwogICAgUVZhcmlhbnQgdmFyID0gbW9kZWwoKS0+aGVhZGVyRGF0YShsb2dpY2FsSW5kZXgsIG9y aWVudGF0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UXQ6OkZvbnRSb2xlKTsKICAgIFFGb250IGZudDsKICAgIGlmICh2YXIuaXNWYWxpZCgpICYmIHFW YXJpYW50Q2FuQ29udmVydDxRRm9udD4odmFyKSkKICAgICAgICBmbnQgPSBxdmFyaWFudF9jYXN0 PFFGb250Pih2YXIpOwogICAgZWxzZQogICAgICAgIGZudCA9IGZvbnQoKTsKICAgIGZudC5zZXRC b2xkKHRydWUpOwogICAgb3B0LmZvbnRNZXRyaWNzID0gUUZvbnRNZXRyaWNzKGZudCk7CiAgICBv cHQudGV4dCA9IG1vZGVsKCktPmhlYWRlckRhdGEobG9naWNhbEluZGV4LCBvcmllbnRhdGlvbigp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdDo6RGlzcGxheVJvbGUpLnRv U3RyaW5nKCk7CiAgICBRVmFyaWFudCB2YXJpYW50ID0gbW9kZWwoKS0+aGVhZGVyRGF0YShsb2dp Y2FsSW5kZXgsIG9yaWVudGF0aW9uKCksIFF0OjpEZWNvcmF0aW9uUm9sZSk7CiAgICBvcHQuaWNv biA9IHF2YXJpYW50X2Nhc3Q8UUljb24+KHZhcmlhbnQpOwogICAgaWYgKG9wdC5pY29uLmlzTnVs bCgpKQogICAgICAgIG9wdC5pY29uID0gcXZhcmlhbnRfY2FzdDxRUGl4bWFwPih2YXJpYW50KTsK ICAgIFFTaXplIHNpemUgPSBzdHlsZSgpLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfSGVh ZGVyU2VjdGlvbiwgJm9wdCwgUVNpemUoKSwgdGhpcyk7CgoJYm9vbCBoYXNTb3J0SW5kaWNhdG9y ID0gaXNTb3J0SW5kaWNhdG9yU2hvd24oKSAmJiBzb3J0SW5kaWNhdG9yU2VjdGlvbigpID09IGxv Z2ljYWxJbmRleDsKCWlmIChoYXNTb3J0SW5kaWNhdG9yIHx8IGFzc3VtZVNvcnRJbmRpY2F0b3Ip Cgl7CiAgICAgICAgaW50IG1hcmdpbiA9IHN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f SGVhZGVyTWFyZ2luLCAmb3B0LCB0aGlzKTsKICAgICAgICBpZiAob3JpZW50YXRpb24oKSA9PSBR dDo6SG9yaXpvbnRhbCkKICAgICAgICAgICAgc2l6ZS5yd2lkdGgoKSArPSBzaXplLmhlaWdodCgp ICsgbWFyZ2luOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2l6ZS5yaGVpZ2h0KCkgKz0gc2l6 ZS53aWR0aCgpICsgbWFyZ2luOwogICAgfQogICAgcmV0dXJuIHNpemU7Cgp9Cg== ------=_Part_3226_21324053.1232247119576--